LyoKICogIE5vdGVwYWQgKEl0YWxpYW4gcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTcsOTggTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgogKiAgQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqICBDb3B5cmlnaHQgMjAwMyBNYXJjZWxvIER1YXJ0ZQogKiAgQ29weXJpZ2h0IDIwMDMtMjAwNCBJdmFuIExlbyBQdW90aQogKiAgQ29weXJpZ2h0IDIwMDYgQW50b25pbyBDb2RhenppCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfSVRBTElBTiwgU1VCTEFOR19ORVVUUkFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkZpbGUiIHsKICBNRU5VSVRFTSAiJk51b3ZvXHRDdHJsK04iLCAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICImQXByaS4uLlx0Q3RybCtPIiwgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZTYWx2YVx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIlNhbHZhICZjb24gbm9tZS4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZTdGFtcGEuLi5cdEN0cmwrUCIsICAgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIiZJbXBvc3RhIHBhZ2luYS4uLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIiZDb25maWd1cmF6aW9uZSBzdGFtcGFudGUuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJFJnNjaSIsICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICImTW9kaWZpY2EiIHsKICBNRU5VSVRFTSAiJkFudWxsYVx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUYWdsaWFcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImQ29waWFcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImSW5jb2xsYVx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZFbGltaW5hXHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiU2VsZXppb25hICZ0dXR0b1x0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJk9yYS9EYXRhXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkEgY2FwbyBhdXRvbWF0aWNvIiwgIENNRF9XUkFQCiAgTUVOVUlURU0gIiZJbXBvc3RhIGNhcmF0dGVyZS4uLiIsICAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICImVHJvdmEiIHsKICBNRU5VSVRFTSAiJlRyb3ZhLi4uXHRDdHJsK0YiLCAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJlRyb3ZhIHN1Y2Nlc3Npdm9cdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkFpdXRvIiB7CiAgTUVOVUlURU0gIiZDb250ZW51dGkiLCAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZUcm92YS4uLiIsICAgICAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkFpdXRvIHN1bGxhIEd1aWRhIiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiSW5mJm8iIHsKICAgTUVOVUlURU0gIiZMaWNlbnphLi4uIiwgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJkdhcmFuemlhLi4uIiwgICAgIENNRF9OT19XQVJSQU5UWQogICBNRU5VSVRFTSAiJkluZm9ybWF6aW9uaSBzdWwgQmxvY2NvIE5vdGUuLi4iLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIkltcG9zdGEgcGFnaW5hIgp7CkxURVhUICAgICImTm90ZSBhIGluaXppbyBwYWdpbmE6IiwgIDB4MTQwLCAgIDEwLCAwNCwgNDAsIDE4CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZOb3RlIGEgcGnoIGRpIHBhZ2luYToiLCAgMHgxNDIsICAgMTAsIDIzLCA0MCwgMTgKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIiZNYXJnaW5pOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJlNpbmlzdHJvOiIsICAgICAgICAweDE0NSwgICAxNCwgNTUsIDM2LCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImU3VwZXJpb3JlOiIsICAgICAgICAgMHgxNDgsICAgIDE0LCA3MywgMzYsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZEZXN0cm86IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSW5mZXJpb3JlOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsbGEiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBaXV0byIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlBhZ2UgJnAiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmxvY2NvIG5vdGUiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUkUiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBVFRFTlpJT05FIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mbyIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc2VuemEgbm9tZSkiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHV0dGkgaSBmaWxlICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIkZpbGUgZGkgdGVzdG8gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbCBmaWxlICclcycg6CB0cm9wcG8gZ3JhbmRlIHBlciBpbCBibG9jY28gbm90ZS5cbiBcClBlciBmYXZvcmUgdXNhcmUgdW4gYWx0cm8gZWRpdG9yLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbiDoIHN0YXRvIGluc2VyaXRvIGFsY3VuIHRlc3RvLiBcClxuUGVyIGZhdm9yZSBkaWdpdGFyZSBxdWFsY29zYSBlIHJpcHJvdmFyZSIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklsIGZpbGUgJyVzJ1xubm9uIGVzaXN0ZVxuXG4gXApDcmVhcmUgdW4gbnVvdm8gZmlsZSA/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWwgZmlsZSAnJXMnXG5lJyBzdGF0byBtb2RpZmljYXRvXG5cbiBcClNhbHZhcmUgbGUgbW9kaWZpY2hlID8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgbm9uIOggc3RhdG8gdHJvdmF0by4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiTWVtb3JpYSBpbnN1ZmZpY2llbnRlIHBlciBjb21wbGV0YXJlIHF1ZXN0YSBvcGVyYXppb25lIFwKIFxuQ2hpdWRlcmUgdW5hIG8gcGn5IGFwcGxpY2F6aW9uaSBwZXIgYXVtZW50YXJlIGxhIHF1YW50aXRhJ1xuIGRpIG1lbW9yaWEgbGliZXJhLiIKCn0K