LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDUgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRQpCRUdJTgpJRFNfRURJVCwJCSLG7cH9KCZFKSIKSURTX0RFRkFVTFQsCQkiseK6u8C4t84gvLPBpCgmRCkiCklEU19QUk9QRVJUSUVTLAkJIrzTvLooJlApIgpJRFNfTUFSSywJCSImTWFyayIKSURTX0NPUFksCQkiurm75ygmQykiCklEU19QQVNURSwJCSK62b+ps9ax4igmUCkiCklEU19TRUxFQ1RBTEwsCQkiuPC1ziC8scXDKCZTKSIKSURTX1NDUk9MTCwJCSK9usWpt9EoJlIpIgpJRFNfU0VBUkNILAkJIsOjseIoJkUpIgpJRFNfRk5UX0RJU1BMQVksCSKworCiwMcgsdvA2rTCICVsZCAgx8i8vyCzyrrxv6EgJWxkIMfIvL8gs/TAzLimILChwf20z7TZIgpJRFNfRk5UX1BSRVZJRVdfMSwJIsDMsM3AuiDF1726xq7A1LTPtNkiCklEU19GTlRfUFJFVklFV18yLAkiIgpJRFNfRExHX1RJVF9ERUZBVUxULCAgICAivLPEoSAtILHiursgvLPBpCIKSURTX0RMR19USVRfQ1VSUkVOVCwgICAgIryzxKEgLSDH9sDnILyzwaQiCklEU19ETEdfVElUX0VSUk9SLAkivLPBpCC/obevIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsCSK9usWpuLAgufbG2yDFqbHitMIgud215b3DIMOiwMcgsM26uLTZILCwsMWzqiDEv77fx9W0z7TZLiIKRU5ECgpJRERfT1BUSU9OIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIL/JvMcgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICLEv7ytIMWpseIiLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIsDbsNQoJlMpIiwgSURDX09QVF9DVVJTT1JfU01BTEwsIDE0LCAyMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIsHfsKMoJk0pIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICLFqbDUKCZMKSIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICLEwcaut9EiLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIsbLvvcguN60uiIsIC0xLCA3OSwgMjMsIDQwLCAxMAoJQVVUT0NIRUNLQk9YICLEwcaut9EoJkMpIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICK9rMfBxq4oJkgpIiwgSURDX09QVF9DT05GX1NISUZULCAxMjksIDMzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUxURVhUICK6/LilIMbtwf0iLCAtMSwgNzksIDQzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAisKG0ySgmRSkiLCBJRENfT1BUX1FVSUNLX0VESVQsIDEyOSwgNDMsIDYwLCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICK47bfJIMj3vbrF5LiuIiwgLTEsIDEwLCA1NywgMTkwLCAzNSwgQlNfR1JPVVBCT1gKCUxURVhUICK02b3DILrOtMIguO23ycDHILC5vPYoJk4pIDoiLCAtMSwgMTQsIDY3LCA3OCwgMTgKCUVESVRURVhUIElEQ19PUFRfSElTVF9TSVpFLCA5MiwgNjksIDMxLCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfT1BUX0hJU1RfU0laRV9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglBVVRPQ0hFQ0tCT1ggIrT1uu3B7iDBprDFKCZSKSIsIElEQ19PUFRfSElTVF9OT0RPVUJMRSwgMTMwLCA2NywgNTAsIDE4LCBXU19UQUJTVE9QfEJTX01VTFRJTElORQp9CgpJRERfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiCx27LDICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglMVEVYVCAisduywygmRikiLCAtMSwgNSwgNSwgMjQsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX0ZPTlQsIDUsIDE4LCA5MCwgNDIsIExCU19TT1JUfFdTX1ZTQ1JPTEwKCUxURVhUICK79rvzKCZDKSIsIC0xLCAxMDAsIDUsIDUwLCA4CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0ZHLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDE4LCA0OCwgMTYKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfQkssICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgNDAsIDQ4LCAxNgoJTFRFWFQgIsWpseI7KCZTKSIsIC0xLCAxNTgsIDUsIDQwLCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9TSVpFLCAxNTgsIDE4LCA0MCwgNjAsIFdTX1ZTQ1JPTEwKCUNPTlRST0wgIiIsIElEQ19GTlRfUFJFVklFVywgIldpbmVDb25Gb250UHJldmlldyIsIDBMLCA1LCA2MCwgMTA5LCA0MAoJTFRFWFQgIiIsIElEQ19GTlRfRk9OVF9JTkZPLCAxMjgsIDc2LCA4MCwgMTgKfQoKSUREX0NPTkZJRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiC8s8GkICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiufbG2yDBuCIsIC0xLCAxMCwgMTEsIDEwMCwgNDIsIEJTX0dST1VQQk9YCglMVEVYVCAis8q68SgmVykgOiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA2OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICKz9MDMKCZIKSA6IiwgLTEsIDE0LCAzOSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfSEVJR0hULCA2OCwgMzcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIsOiIMWpseIiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAis8q68SgmSSkgOiIsIC0xLCAxNCwgNjksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9XSURUSCwgNjgsIDY3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIrP0wMwoJkUpIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICLHrrHXuLLAxyCzoSIsIC0xLCAxMTUsIDExLCA4MCwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIsTcvNYgtN2x4igmQykiLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDc1LCAyMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICK/obXwvMciLCAtMSwgMTE1LCA1NSwgODAsIDQyCglDT01CT0JPWCBJRENfQ05GX0VESVRJT05fTU9ERSwgMTE5LCA2OSwgNzUsIDIwLCBDQlNfRFJPUERPV05MSVNUfFdTX1ZTQ1JPTEx8V1NfVEFCU1RPUAp9CgpJRERfU0FWRV9TRVRUSU5HUyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAyMCwgMjAsIDE0MCwgNjAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTgpDQVBUSU9OICIgxNy81iC4xbCzuq+89iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiIiwgLTEsIDEwLCAxMCwgMTIwLCAzMSwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAis6rB38DHILy8vMfAuyDAp8fYILyzwaQgurjBuCIsIElEQ19TQVZfU0FWRSwgMTQsIDE1LCAxMTAsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIr/Awfcgx/bA58DHILy8vMe4uCC6r7DmIiwgSURDX1NBVl9TRVNTSU9OLCAxNCwgMjcsIDExMCwgMTAsIFdTX1RBQlNUT1AKCglQVVNIQlVUVE9OICLIrsDOIiwgSURPSywgMjAsIDQ1LCAzNSwgMTIKCVBVU0hCVVRUT04gIsPrvNIiLCBJRENBTkNFTCwgNjUsIDQ1LCAzNSwgMTIKfQo=