LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDQgSGFqaW1lIFNlZ2F3YQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0pBUEFORVNFLCBTVUJMQU5HX0RFRkFVTFQKCi8qCiAqIE1lbnUKICovCgpJRENfUkVHRURJVCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAig3SDQINDg4soJkYpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAij0mXuSgmeCkiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkhlbHAiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKDb4Fbg1eDh4OTj+6V8SgmQSkuLi4iLCAgICAgICAgICAgICAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCklEUl9SRUdFRElUX01FTlUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIoOMg1eDWINng4ooJlIpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAig4yDV4NYg2eDioLMg0ODk4N8gVuDZygmSSkuLi4iLCAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSAig4yDV4NYg2eDioLMg0eDToNYg3yBW4NnKCZFKS4uLiIsICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDbINig2eDj4Fbg06DjINXg1iDZ4OKgsmQ2pGxKCZDKS4uLiIsIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICKDbINig2eDj4Fbg06DjINXg1iDZ4OKgqmC55DYkmYoJkQpLi4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIojzjfwoJlApXHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKPSZe5KCZ4KSIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICKV0o9XKCZFKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIpXPjVgoJk0pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICKQVotLKCZOKSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAig0yBWygmSykiLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIpW2jpqX8SgmUykiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICKDb4NDg2mDiigmQikiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICJEV09SRJJsKCZEKSIsICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICBFTkQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAije2PnCgmRClcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIpa8kU+CzJXPjVgoJlIpXHRGMiIsICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDTIFblryC8INSg3OBWygmQykiLCAgICAgICAgICAgICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKMn431KCZGKVx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICKOn4LMjJ+N9YzzleIoJngpXHRGMyIsICAgICAgICAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIpVcjqYoJlYpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAig1iDZYFbg16DWINvgVsoJkIpIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIpWqioQoJmwpIiwgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDioN0g4yDYoNWg4UoJlIpXHRGNSIsICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAigqiLQ4LJk/yC6CgmRikiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKCqItDgsmT/ILogsmSx4nBKCZBKSIsICAgICAgICAgIElEX0ZBVk9VUklURVNfQUREVE9GQVZPVVJJVEVTCiAgICAgICAgLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAigqiLQ4LJk/yC6IKpgueN7Y+cKCZSKSIsICAgICAgICAgICBJRF9GQVZPVVJJVEVTX1JFTU9WRUZBVk9VUklURQogICAgICAgICwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICKDd4OLg3YoJkgpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAig3eDi4N2KCZIKVx0RjEiLCAgICAgICAgICAgIElEX0hFTFBfSEVMUFRPUElDUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDb4Fbg1eDh4OTj+6V8SgmQSkiLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCklEUl9QT1BVUF9NRU5VUyBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgUE9QVVAgIiIKICBCRUdJTgoJTUVOVUlURU0gIpXPjVgoJk0pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQoJTUVOVUlURU0gIoNvg0ODaYOKg2aBW4NegvCVz41YIiwgICAgICAgICAgSURfRURJVF9NT0RJRllfQklOCglNRU5VSVRFTSBTRVBBUkFUT1IKCU1FTlVJVEVNICKN7Y+cKCZEKVx0RGVsIiwgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKCU1FTlVJVEVNICKWvJFPgsyVz41YKCZSKSIsICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICBFTkQKICBQT1BVUCAiIgogIEJFR0lOCiAgICAgICAgUE9QVVAgIpBWi0soJk4pIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICKDTIFbKCZLKSIsICAgICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfS0VZCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgICAgICBNRU5VSVRFTSAilbaOmpfxKCZTKSIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIoNvg0ODaYOKKCZCKSIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIkRXT1JEkmwoJkQpIiwgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKN7Y+cKCZEKVx0RGVsIiwgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAilryRT4LMlc+NWCgmUilcdEYyIiwgICAgICAgICAgICAgICAgIElEX0VESVRfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIoNMgVuWvILwg1KDc4FbKCZDKSIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIoyfjfUoJkYpXHRDdHJsK0YiLCAgICAgICAgICAgICAgIElEX0VESVRfRklORCwgR1JBWUVECiAgRU5ECkVORAoKCi8qCiAqIERpYWxvZwogKi8KCklERF9BQk9VVEJPWCBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjMwLCA3NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAig4yDV4NYg2eDioNHg2aDQoNegsmCwoKigsQiCkZPTlQgOSwgIk1TIFVJIEdvdGhpYyIKQkVHSU4KICAgIElDT04gICAgICAgICAgICBJRElfUkVHRURJVCxJRElfUkVHRURJVCwxNCw5LDE2LDE2CiAgICBMVEVYVCAgICAgICAgICAgIlJlYWN0T1Mgg4yDV4NYg2eDioNHg2aDQoNeIINvgVuDV4OHg5MgMS4wIixJRENfU1RBVElDLDQ5LDEwLDExOSw4LAogICAgICAgICAgICAgICAgICAgIFNTX05PUFJFRklYCiAgICBMVEVYVCAgICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwMiBSZWFjdE9TIFRlYW0iLElEQ19TVEFUSUMsNDksMjAsMTE5LDgKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTk1LDYsMzAsMTEsV1NfR1JPVVAKRU5ECgpJRERfRURJVF9TVFJJTkcgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgNzUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIpW2jpqX8YLMldKPVyIKRk9OVCA5LCAiTVMgVUkgR290aGljIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICKSbILMlryRTzoiLElEQ19TVEFUSUMsNSw1LDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX05BTUUsNSwxNSwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBXU19ESVNBQkxFRAogICAgTFRFWFQgICAgICAgICAgICKDZoFbg146IixJRENfU1RBVElDLDUsMzAsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDAsNjAsMzAsMTEsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAig0yDg4OTg1qDiyIsSURDQU5DRUwsMTc1LDYwLDMwLDExLFdTX0dST1VQCkVORAoKSUREX0VESVRfRFdPUkQgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgMTAwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJEV09SRJJsgsyV0o9XIgpGT05UIDksICJNUyBVSSBHb3RoaWMiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIpJsgsyWvJFPOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIoNmgVuDXjoiLElEQ19TVEFUSUMsNSwzMCw5MCw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX0RBVEEsNSw0MCw5MCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAogICAgR1JPVVBCT1ggICAgICAgICKDeIFbg1giLCBJRENfRFdPUkRfQkFTRSwgMTIwLCAzMCwgODUsIDM3LCBCU19HUk9VUEJPWAogICAgQVVUT1JBRElPQlVUVE9OICIxNpBpkJQiLCBJRENfRFdPUkRfSEVYLCAxMzAsIDQwLCA2MCwgMTAsIFdTX1RBQlNUT1AKICAgIEFVVE9SQURJT0JVVFRPTiAiMTCQaZCUIiwgSURDX0RXT1JEX0RFQywgMTMwLCA1MiwgNjAsIDEwLCBXU19UQUJTVE9QCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE0MCw4MCwzMCwxMSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICKDTIODg5ODWoOLIixJRENBTkNFTCwxNzUsODAsMzAsMTEsV1NfR1JPVVAKRU5ECgovKgogKiBTdHJpbmcgVGFibGUKICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0xJU1RfQ09MVU1OX05BTUUgICAgIpa8kU8iCiAgICBJRFNfTElTVF9DT0xVTU5fVFlQRSAgICAig16DQ4N2IgogICAgSURTX0xJU1RfQ09MVU1OX0RBVEEgICAgIoNmgVuDXiIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgIoOMg1eDWINng4qDR4Nmg0KDXiIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICKDjINXg1iDZ4OKkVORzILwkYCN7IK3gumDUoN9g5ODaCIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICKSbILGg0yBW4LwldKPV4K3gumDUoN9g5ODaCIKICAgIElEX1ZJRVdfTUVOVSAgICAgICAgICAgICKDjINXg1iDZ4OKg0WDQoOTg2iDRYLwg0qDWINeg32DQ4NZgreC6YNSg32Dk4NoIgogICAgSURfRkFWT1VSSVRFU19NRU5VICAgICAgIoLmgq2OZ4Kkg0yBW4LJg0GDToNag1iCt4Lpg1KDfYOTg2giCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAig4yDV4NYg2eDioNHg2aDQoNegsmCwoKigsSCzIN3g4uDdoLij+6V8YLwlVyOpoK3gumDUoN9g5ODaCIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICKQVoK1gqKDTIFbguKSbILwjeyQrIK3gumDUoN9g5ODaCIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIpJsgsyDZoFbg16C8JXPjVgiCiAgICBJRF9FRElUX05FV19LRVkgICAgICAgICAikFaCtYKig0yBW4LwkseJwSIKICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFICKQVoK1gqKVto6al/GC8JLHicEiCiAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRSAikFaCtYKig2+DQ4Npg4qC8JLHicEiCiAgICBJRF9FRElUX05FV19EV09SRFZBTFVFICAikFaCtYKiRFdPUkSSbILwkseJwSIKICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRSAig2WDTINYg2eDdINAg0ODi4Lwg4yDV4NYg2eDioLJg0ODk4N8gVuDZyIKICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIoOMg1eDWINng4qCzIjqlZSC3IK9gs2RU5WUgvCDZYNMg1iDZ4N0g0CDQ4OLgsmDR4NOg1iDfIFbg2ciCiAgICBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAig4qDgoFbg2eDUoOTg3ODhYFbg16CzIOMg1eDWINng4qCyZDakbEiCiAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAig4qDgoFbg2eDUoOTg3ODhYFbg16CzIOMg1eDWINng4qCqYLnkNiSZiIKICAgIElEX1JFR0lTVFJZX1BSSU5UICAgICAgICKDjINXg1iDZ4OKgsyI6pWUgtyCvYLNkVOVlILwiPON/CIKLyogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIoOMg1eDWINng4qDR4Nmg0KDXoLMg3eDi4N2gvCKSoKtIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIoN2g42DT4OJg4CCzI/ulfGBQYNvgVuDV4OHg5OBQZKYjeyO0oLwlVyOpiIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfRVhJVCAgICAgICAgIoOMg1eDWINng4qDR4Nmg0KDXoLwj0mXuSIKICAgIElEX0ZBVk9VUklURVNfQUREVE9GQVZPVVJJVEVTICKDTIFbgvCCqItDgsmT/ILogsmSx4nBIgogICAgSURfRkFWT1VSSVRFU19SRU1PVkVGQVZPVVJJVEUgIoNMgVuC8IKoi0OCyZP8guiCqYLnje2PnCIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICKDWINlgVuDXoNYg2+BW4LwlVyOpoFFiUKCtyIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICKDeYNDg5OK1ILMgrWCq4LogsyIypJ1gvCVz41YIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIoNFg0KDk4Nog0WC8IOKg3SDjINig1aDhSIKICAgIElEX0VESVRfREVMRVRFICAgICAgICAgICKRSZHwgrWCvY2AltqC8I3tj5wiCiAgICBJRF9FRElUX1JFTkFNRSAgICAgICAgICAikUmR8IK1gr2NgJbagsyWvJFPgvCVz41YIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIpFJkfCCtYK9g0yBW4LMlryRT4Lwg06DioNig3aDe4Fbg2iCyYNSg3OBWyIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICKDTIFbgUGSbIFBg2aBW4NegqmC55W2jpqX8YLwjJ+N9SIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICKIyJFPgsyMn431j/CMj4LJgqiCooLEjp+CzIzzleKC8IyfjfUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19FUlJPUgkJICAgICKDR4OJgVsiCiAgICBJRFNfQkFEX0tFWQkJICAgICKDTIFbICclcyeCqo+Kk76CxYKrgtyCuYLxIgogICAgSURTX0JBRF9WQUxVRSAgICAgICAgICAgIpJsICclcyeCqo+Kk76CxYKrgtyCuYLxIgogICAgSURTX1VOU1VQUE9SVEVEX1RZUEUgICAgIoKxgsyDXoNDg3aCzINMgVuCzZXSj1eCxYKrgtyCuYLxICglbGQpIgogICAgSURTX1RPT19CSUdfVkFMVUUgICAgICAgIpJsgqqR5YKrgreCrILcgrcgKCVsZCkiCiAgICBJRFNfREVMRVRFX0JPWF9USVRMRSAgICAikmyCzI3tj5yKbZRGIgogICAgSURTX0RFTEVURV9CT1hfVEVYVCAgICAgIpZ7k5aCySAnJXMngvCN7Y+cgrWC3IK3gqk/IgogICAgSURTX05FV0tFWSAgICAgICAgICAgICAgIpBWgrWCooNMgVsgIyVkIgogICAgSURTX05FV1ZBTFVFICAgICAgICAgICAgIpBWgrWCopJsICMlZCIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0RJQUxPRzEgRElBTE9HIERJU0NBUkRBQkxFICA1MCwgNTAsIDI2OCwgOTgKU1RZTEUgRFNfM0RMT09LIHwgRFNfQ09OVFJPTCB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0NMSVBTSUJMSU5HUyB8CiAgICBXU19CT1JERVIKRk9OVCA5LCAiTVMgVUkgR290aGljIgpCRUdJTgpFTkQKCklERF9ESUFMT0cyIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTg3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICKDX4NDg0GDjYNPIgpGT05UIDksICJNUyBVSSBHb3RoaWMiCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDEzMCw3LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIoNMg4ODk4Nag4siLElEQ0FOQ0VMLDEzMCwyNCw1MCwxNApFTkQKCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIoOMg1eDWINng4qDR4Nmg0KDXoLMg3eDi4N2gvCKSoKtIgogKiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAig3aDjYNPg4mDgILMj+6V8YFBg2+BW4NXg4eDk4FBkpiN7I7SgvCVXI6mIgogKkVORAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K