LyoKICogIE5vdGVwYWQgKFRoYWkgUmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDMgSm9uIEdyaWZmaXRocwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1RIQUksIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIuG/6cEiIHsKICBNRU5VSVRFTSAiysPp0qfjy8HoLi4uIiwgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAi4LvUtC4uLlx0Q3RybCtPIiwgICBDTURfT1BFTgogIE1FTlVJVEVNICK60bm316FcdEN0cmwrUyIsICAgICBDTURfU0FWRQogIE1FTlVJVEVNICK60bm316Hgu+e5Li4uIiwgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAivtTBvuwiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICK7w9G64bXop8u56dIuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICK7w9G64bXop+Ckw9fozae+1MG+7C4uLiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIs3NoSIsICAgICAgICAgICAgIENNRF9FWElUCiB9CiBQT1BVUCAi4aHp5KIiIHsKICBNRU5VSVRFTSAi4MPVwqGk17lcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICK10bRcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICK10bTFzaFcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICLH0qdcdEN0cmwrViIsICAgIENNRF9QQVNURQogIE1FTlVJVEVNICLFulx0RGVsIiwgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIuDF182ht9Hpp8vBtFx0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAix9G5t9XoL1x0RjUiLCAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsvozbrDw7fRtMLSxyIsICBDTURfV1JBUAogIE1FTlVJVEVNICLD2bvhurq00cfN0aHJwy4uLiIsICAgICAgICAgIENNRF9GT05UCiB9CiBQT1BVUCAipNG5y9IiIHsKICBNRU5VSVRFTSAipOm5y9JcdEN0cmwrRiIsICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICKk6bnL0rXozeS7XHRGMyIsICBDTURfU0VBUkNIX05FWFQKIH0KIFBPUFVQICKq6MfC4MvF1c0iIHsKICBNRU5VSVRFTSAi4LnX6c3L0iIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAipOm5y9IuLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIuCh1ejCx6HRuqrox8Lgy8XVzSIsICAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIsPSwsXQ4M3VwrQuLi4iIHsKICAgTUVOVUlURU0gIuO6zbnYrdK1IiwgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIuTB6MHVIFdBUlJBTlRZIiwgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICLgodXowseh0bogV2luZS4uLiAiLCBDTURfQUJPVVRfV0lORQogIH0KIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICK7w9G64bXop8u56dIiCnsKTFRFWFQgICAgIsvRxzoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgMHgxNDEsICAgICAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRm9vdGVyOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICKizbqhw9C00sk6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICKj6dLCOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwqLyAgIDB4MTQ3LCAgICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICK6uToiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCovICAgIDB4MTRBLCAgICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiosfSOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCovICAweDE0RCwgICAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICLF6NKnOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICK1ocWnIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiwqHgxdShIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICKq6MfC4MvF1c0iLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICImbiIgICAgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICLLuenSICZzIiAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICIyMCDBwS4iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAiMjAgwcEuIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgIjI1IMHBLiIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICIyNSDBwS4iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsICAgICAgICJOb3RlcGFkIgpTVFJJTkdfRVJST1IsICAgICAgICAgIqTH0sG71LQiClNUUklOR19XQVJOSU5HLCAgICAgICAipO3StdfNuSIKU1RSSU5HX0lORk8sICAgICAgICAgICLD0sLF0ODN1cK0IgoKU1RSSU5HX1VOVElUTEVELCAgICAgICLkweih7dLLubSq1ujNIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgIrfYoeG/6cEgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICLhv+nBte3Sw9IgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICLhv+nBICclcycg48ut6OCh1LnkuyIKU1RSSU5HX05PVEVYVCwgICAgIqTYs+TB6OO04KLVwrnN0OTDXG6hw9iz0sXNp+PLwegiClNUUklOR19ET0VTTk9URVhJU1QsICLkwei+uuG/6cEgJyVzJyC31ei16c2nodLD4LvUtFxupNiztenNp6HSw8rD6dKn48vB6OTB6CA/IgpTVFJJTkdfTk9UU0FWRUQsICAiwdWh0sPgu8XV6MK54bvFp6HRuuDNocrSw1xuXG4nJXMnXG5cbqTYs7Xpzaeh0sO60bm31qHB0bnLw9fN5MHoID8iClNUUklOR19OT1RGT1VORCwgICLkwei+uqLpzaTH0sEgJyVzJyC31ei16c2nodLDpOm5y9IiClNUUklOR19PVVRfT0ZfTUVNT1JZLCAipMfSwajt0svBtFxuocPYs9LFzafjy8HoIgoKfQo=