LyoKICogIE5vdGVwYWQgKFRoYWkgUmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDMgSm9uIEdyaWZmaXRocwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1RIQUksIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIuG/6cEiIHsKICBNRU5VSVRFTSAiysPp0qfjy8HoXHRDdHJsK04iLCAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICLgu9S0Li4uXHRDdHJsK08iLCAgIENNRF9PUEVOCiAgTUVOVUlURU0gIrrRubfXoVx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIrrRubfXoeC757kuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICK+1MG+7Fx0Q3RybCtQIiwgICAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiu8PRuuG16KfLuenSLi4uIiwgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiu8PRuuG16KfgpMPX6M2nvtTBvuwuLi4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLNzaEiLCAgICAgICAgICAgICBDTURfRVhJVAogfQogUE9QVVAgIuGh6eSiIiB7CiAgTUVOVUlURU0gIuDD1cKhpNe5XHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAitdG0XHRDdHJsK1giLCAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAitdG0xc2hXHRDdHJsK0MiLCAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAix9KnXHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAixbpcdERlbCIsICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLgxdfNobfR6afLwbRcdEN0cmwrQSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIsfRubfV6C9cdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLL6M26w8O30bTC0sciLCAgQ01EX1dSQVAKICBNRU5VSVRFTSAiw9m74bq6tNHHzdGhycMuLi4iLCAgICAgICAgICBDTURfRk9OVAogfQogUE9QVVAgIqTRucvSIiB7CiAgTUVOVUlURU0gIqTpucvSXHRDdHJsK0YiLCAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAipOm5y9K16M3ku1x0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9CiBQT1BVUCAiqujHwuDLxdXNIiB7CiAgTUVOVUlURU0gIuC51+nNy9IiLCAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIqTpucvSLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICLgodXowseh0bqq6MfC4MvF1c0iLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWJvdXQgTm90ZXBhZCIsIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICK7w9G64bXop8u56dIiCnsKTFRFWFQgICAgIsvRxzoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkZvb3RlcjoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIqLNuqHD0LTSyToiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIqPp0sI6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIrq5OiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIqLH0joiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIsXo0qc6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAitaHFpyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIsKh4MXUoSIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiqujHwuDLxdXNIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICLLuenSICZwIgoKU1RSSU5HX05PVEVQQUQsICAgICAgICJOb3RlcGFkIgpTVFJJTkdfRVJST1IsICAgICAgICAgIqTH0sG71LQiClNUUklOR19XQVJOSU5HLCAgICAgICAipO3StdfNuSIKU1RSSU5HX0lORk8sICAgICAgICAgICLD0sLF0ODN1cK0IgoKU1RSSU5HX1VOVElUTEVELCAgICAgICLkweih7dLLubSq1ujNIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgIrfYoeG/6cEgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICLhv+nBte3Sw9IgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICLhv+nBICclcycg48ut6OCh1LnkuyIKU1RSSU5HX05PVEVYVCwgICAgIqTYs+TB6OO04KLVwrnN0OTDXG6hw9iz0sXNp+PLwegiClNUUklOR19ET0VTTk9URVhJU1QsICLkwei+uuG/6cEgJyVzJyC31ei16c2nodLD4LvUtFxupNiztenNp6HSw8rD6dKn48vB6OTB6CA/IgpTVFJJTkdfTk9UU0FWRUQsICAiwdWh0sPgu8XV6MK54bvFp6HRuuDNocrSw1xuXG4nJXMnXG5cbqTYs7Xpzaeh0sO60bm31qHB0bnLw9fN5MHoID8iClNUUklOR19OT1RGT1VORCwgICLkwei+uqLpzaTH0sEgJyVzJyC31ei16c2nodLDpOm5y9IiClNUUklOR19PVVRfT0ZfTUVNT1JZLCAipMfSwajt0svBtFxuocPYs9LFzafjy8HoIgoKfQo=