LyoKICogIE5vdGVwYWQgKEl0YWxpYW4gcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTcsOTggTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgogKiAgQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqICBDb3B5cmlnaHQgMjAwMyBNYXJjZWxvIER1YXJ0ZQogKiAgQ29weXJpZ2h0IDIwMDMtMjAwNCBJdmFuIExlbyBQdW90aQogKiAgQ29weXJpZ2h0IDIwMDYgQW50b25pbyBDb2RhenppCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfSVRBTElBTiwgU1VCTEFOR19ERUZBVUxUCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkZpbGUiIHsKICBNRU5VSVRFTSAiJk51b3ZvXHRDdHJsK04iLCAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICImQXByaS4uLlx0Q3RybCtPIiwgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZTYWx2YVx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIlNhbHZhICZjb24gbm9tZS4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZTdGFtcGEuLi5cdEN0cmwrUCIsICAgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIiZJbXBvc3RhIHBhZ2luYS4uLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIiZDb25maWd1cmF6aW9uZSBzdGFtcGFudGUuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJFJnNjaSIsICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICImTW9kaWZpY2EiIHsKICBNRU5VSVRFTSAiJkFudWxsYVx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUYWdsaWFcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImQ29waWFcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImSW5jb2xsYVx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZFbGltaW5hXHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiU2VsZXppb25hICZ0dXR0b1x0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJk9yYS9EYXRhXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkEgY2FwbyBhdXRvbWF0aWNvIiwgIENNRF9XUkFQCiAgTUVOVUlURU0gIiZJbXBvc3RhIGNhcmF0dGVyZS4uLiIsICAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICImVHJvdmEiIHsKICBNRU5VSVRFTSAiJlRyb3ZhLi4uXHRDdHJsK0YiLCAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJlRyb3ZhIHN1Y2Nlc3Npdm9cdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkFpdXRvIiB7CiAgTUVOVUlURU0gIiZDb250ZW51dGkiLCAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZUcm92YS4uLiIsICAgICAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkFpdXRvIHN1bGxhIEd1aWRhIiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiSW5mJm8iIHsKICAgTUVOVUlURU0gIiZMaWNlbnphLi4uIiwgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJkdhcmFuemlhLi4uIiwgICAgIENNRF9OT19XQVJSQU5UWQogICBNRU5VSVRFTSAiJkluZm9ybWF6aW9uaSBzdWwgQmxvY2NvIE5vdGUuLi4iLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIkltcG9zdGEgcGFnaW5hIgp7CkxURVhUICAgICImTm90ZSBhIGluaXppbyBwYWdpbmE6IiwgIDB4MTQwLCAgIDEwLCAwNCwgNDAsIDE4CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJk5vdGUgYSBwaeggZGkgcGFnaW5hOiIsICAweDE0MiwgICAxMCwgMjMsIDQwLCAxOApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFyZ2luaToiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZTaW5pc3RybzoiLCAgICAgICAgMHgxNDUsICAgMTQsIDU1LCAzNiwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlN1cGVyaW9yZToiLCAgICAgICAgIDB4MTQ4LCAgICAxNCwgNzMsIDM2LCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCovICAgIDB4MTRBLCAgICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkRlc3RybzoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkluZmVyaW9yZToiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCovIDB4MTUwLCAgICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxsYSIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkFpdXRvIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImbiIgICAgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlBhZ2UgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICAgICAgICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICAgICAgICAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9jY28gbm90ZSIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SRSIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFUVEVOWklPTkUiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzZW56YSBub21lKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUdXR0aSBpIGZpbGUgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAiRmlsZSBkaSB0ZXN0byAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklsIGZpbGUgJyVzJyDoIHRyb3BwbyBncmFuZGUgcGVyIGlsIGJsb2NjbyBub3RlLlxuIFwKUGVyIGZhdm9yZSB1c2FyZSB1biBhbHRybyBlZGl0b3IuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uIOggc3RhdG8gaW5zZXJpdG8gYWxjdW4gdGVzdG8uIFwKXG5QZXIgZmF2b3JlIGRpZ2l0YXJlIHF1YWxjb3NhIGUgcmlwcm92YXJlIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWwgZmlsZSAnJXMnXG5ub24gZXNpc3RlXG5cbiBcCkNyZWFyZSB1biBudW92byBmaWxlID8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbCBmaWxlICclcydcbmUnIHN0YXRvIG1vZGlmaWNhdG9cblxuIFwKU2FsdmFyZSBsZSBtb2RpZmljaGUgPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBub24g6CBzdGF0byB0cm92YXRvLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJNZW1vcmlhIGluc3VmZmljaWVudGUgcGVyIGNvbXBsZXRhcmUgcXVlc3RhIG9wZXJhemlvbmUgXAogXG5DaGl1ZGVyZSB1bmEgbyBwafkgYXBwbGljYXppb25pIHBlciBhdW1lbnRhcmUgbGEgcXVhbnRpdGEnXG4gZGkgbWVtb3JpYSBsaWJlcmEuIgoKfQo=