LyoKICogIE5vdGVwYWQgKFdhbG9uIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAxOTk3LDk4IE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KICogIFByb29mcmVhZCAxOTk4IGJ5IERhdmlkIExlZSBMYW1iZXJ0IDxsYW1iZXI0NUBlZ3IubXN1LmVkdT4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaWZkZWYgTEFOR19XQUxPTgoKTEFOR1VBR0UgTEFOR19XQUxPTiwgU1VCTEFOR19ERUZBVUxUCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkZpdGNo7iIgewogIE1FTlVJVEVNICImTm92ZWFcdEN0cmwrTiIsICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICImRHJvdu4uLi5cdEN0cmwrTyIsICAgICAgICAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJlNjaGFwZXJcdEN0cmwrUyIsICAgICAgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIlNjaGFwZXIg6HQgciZsb21lci4uLiIsICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNICImUmV4aGUuLi5cdEN0cmwrUCIsICAgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIkFycmFuZGptaW50IGRlbCAmUOVkamUuLi4iLCBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICImQXBvbnRpYWVkamUgZGVsIHNjcmlyZWNlLi4uIiwgICAgICBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJNb3Vzc+4gJkZv+yIsICAgICAgIENNRF9FWElUCiB9ClBPUFVQICImQ2FuZGruIiB7CiAgTUVOVUlURU0gIiZEaXNm6Vx0Q3RybCtaIiwgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQ/QmcGVyXHRDdHJsK1giLCAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZDb3B57lx0Q3RybCtDIiwgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiQyZsYXBlclx0Q3RybCtWIiwgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJlJhZmFjZXJcdERlbCIsICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUY2h3ZXppIHRvdGFmd2FpdCIsICAgICAgICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImRXVyZS9EYXRlXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQ/RwZXIgbGVzIHJvJnllcyIsICBDTURfV1JBUAogfQpQT1BVUCAiQyZ3ZXLuIiB7CiAgTUVOVUlURU0gIkN3ZXLuLi4uIiwgICAgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICImU2j7dmFudFx0RjMiLCAgICAgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkFpZGUiIHsKICBNRU5VSVRFTSAixSZkdmlucyIsICAgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICJDJndlcu4uLi4iLCAgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImQWlkZSBzbyBsJyBBaWRlIiwgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFib3V0IE5vdGVwYWQuLi4iLCBDTURfSEVMUF9BQk9VVF9OT1RFUEFECiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiQXJpbmRqbWludCBkZWwgUOVkamUiCnsKTFRFWFQgICAgIiZUaXRlOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUO5ub3RlOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmRqZXM6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImSGludGNoZToiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkNvcGV0ZToiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRHJvZXRlOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkJhczoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJJIFZhIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUmlub25j7iIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkFpZGUiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQ5WRqZSAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3RlcGFkIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVJPS0UiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRFZFUlRJWEhNSU5UIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3Jt5WNpb24iCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHNpbiB0aXRlKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3MgbGVzIGZpdGNo7nMgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAiRml0Y2jucyB0ZWtzZSAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxpIGZpdGNo7iAnJXMnIGVzdCB0cm9wIGdyb3MgcG9sIG5vdGVwYWQuXG4gXApFcGxveW96IG9uIPR0ZSBhc3BvdWduZXUgZGkgdGVrc2UuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVm9zIG4nIGF2b3ogculuIHNpY3LudC4gXApcblRhcGV6IGVuZSBzYWN3ZSDodCByYXNheWV6IgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZSAnJXMnXG5kb2VzIG5vdCBleGlzdFxuXG4gXApEbyB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZmlsZSA/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGkgZml0Y2juICclcydcbmEgY2FuZGruXG5cbiBcCkVsIHZvbG96IHNjaGFwZXIgPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBwb3V0IG7pbiBlc3NlIHRyb3bpLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJMaSBtZW13ZXJlIGVzdCBwbGlubmUuIFxuXApDbG95b3ogb24gcHJvZ3JhbWUgb3UgcHVzIHBvIG1vbnRlciBsaSBtZW13ZXJlIGxpYmUuIgoKfQoKI2VuZGlmICAvKiBMQU5HX1dBTE9OICovCg==