LyoKICogQ29weXJpZ2h0IDIwMDggVml0YWxpeSBNYXJnb2xlbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgoKTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19IVE1MRElTQUJMRUQgICAgIsIg7eDx8u7/+eXlIOLw5ez/IO7y7uHw4Obl7ejlIEhUTUwg4vvq6/735e3t7i4iCiAgICBJRFNfSFRNTERPQ1VNRU5UICAgICLE7urz7OXt8iBIVE1MIgogICAgSURTX0RPV05MT0FESU5HICAgICAix+Dj8PPn6uAuLi4iCiAgICBJRFNfSU5TVEFMTElORyAgICAgICLT8fLg7e7i6uAuLi4iCn0KCklEX0RXTF9ESUFMT0cgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgIDAsIDAsIDI2MSwgODUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX0NFTlRFUiB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gItPx8uDt7uLq4CBXaW5lIEdlY2tvIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIExURVhUICLd8uAg7/Du4/Dg7OzgIO/78uDl8vH/IO7y7uHw4Ofo8vwgSFRNTCDx8vDg7ej28y4gxOv/IOW4IO7y7uHw4Obl7ej/IFdpbmUg7eXu4fXu5Ojs7iAiIFwKICAgICAgICAgICLz8fLg7e7i6PL8IEdlY2tvIChNb3ppbGxhIEhUTUwgZW5naW5lKS4gzeDm7Ojy5SDq7e7v6vMg8/Hy4O3u4ujy/CDl8evoIOL7IPXu8ujy5Swg9/LuIOH7IFdpbmUgIiBcCiAgICAgICAgICAi4OLy7uzg8uj35fHq6CDn4OPw8+fo6yDoIPPx8uDt7uLo6yBHZWNrby4iLCBJRF9EV0xfU1RBVFVTLCAxMCwgMTAsIDI0MCwgMzMsIFNTX0xFRlQKICAgIENPTlRST0wgIs/w7uPw5fHxIiwgSURfRFdMX1BST0dSRVNTLCBQUk9HUkVTU19DTEFTU0EsIFdTX0JPUkRFUnxQQlNfU01PT1RILCAxMCwgNDYsIDI0MCwgMTIKICAgIERFRlBVU0hCVVRUT04gIibT8fLg7e7i6PL8IiwgSURfRFdMX0lOU1RBTEwsIDIwMCwgNjMsIDUwLCAxNSwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICImzvLs5e3gIiwgSURDQU5DRUwsIDE0MCwgNjMsIDUwLCAxNSwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCn0KCklERF9IWVBFUkxJTksgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjUwLCA2NQpTVFlMRSBEU19DRU5URVIgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLR8fvr6uAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgR1JPVVBCT1ggIsjt9O7w7OD26P8g7iDx8fvr6uUiLCAtMSwgNSwgNSwgMTkwLCA1NQogICAgTFRFWFQgIibS6O86IiwgLTEsIDEwLCAyMiwgMjAsIDEwCiAgICBDT01CT0JPWCBJRENfVFlQRSwgMzUsIDIwLCA0NSwgMTAwLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgQ0JTX0RST1BET1dOTElTVCB8IENCU19IQVNTVFJJTkdTCiAgICBMVEVYVCAiJsDk8OXxOiIsIC0xLCAxMCwgNDIsIDIwLCAxMAogICAgRURJVFRFWFQgSURDX1VSTCwgMzUsIDQwLCAxNTAsIDE0LCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAyMDAsIDEwLCA0NSwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gIs7y7OXt4CIsIElEQ0FOQ0VMLCAyMDAsIDI4LCA0NSwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAp9Cg==