LyoKICogQ29weXJpZ2h0IDIwMDUgS2ltbW8gTXlsbHl2aXJ0YQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZJTk5JU0gsIFNVQkxBTkdfREVGQVVMVAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZTdXVyZXQga3V2YWtrZWV0IiwJCUZDSURNX1NIVklFV19CSUdJQ09OCglNRU5VSVRFTSAiJlBpZW5ldCBrdXZha2tlZXQiLAkJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJTUVOVUlURU0gIiZMaXN0YSIsCQkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCglNRU5VSVRFTSAiJlRpZWRvdCIsCQkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIiZO5Gt5beQiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZQaWVuZXQga3V2YWtrZWV0IiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiJlN1dXJldCBrdXZha2tlZXQiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0YSIsCQkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIiZUaWVkb3QiLAkJCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIiZK5HJqZXN05CBrdXZha2tlZXQiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZOaW1lbiBtdWthYW4iLAkJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICImVHl5cGluIG11a2FhbiIsCQkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIiZLb29uIG11a2FhbiIsCQkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICImUORpduRt5ORy5G4gbXVrYWFuIiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICJK5HJqZXN05CAmYXV0b21hYXR0aXNlc3RpIiwgRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiSuRyamVzdOQga3V2YWtrZWV0IHJpdmlpbiIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiUORpdml05CIsCQkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJMaWl05CIsCQkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiTGlpdOQgbGlua2lrc2kiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJVdXNpIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJVdXNpICZrYW5zaW8iLAkJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJVdXNpICZsaW5ra2kiLAkJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiT21pbmFpc3V1ZGV0IiwJCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBNRU5VSVRFTSAiJlNlbGFhIiwJCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQoJICBNRU5VSVRFTSAiJkF2YWEiLAkJCUZDSURNX1NIVklFV19PUEVOCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJkxlaWtrYWEiLAkJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3Bpb2kiLAkJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiTHUmbyBsaW5ra2kiLAkJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZQb2lzdGEiLAkJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZOaW1l5CB1dWRlbGxlZW4iLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZPbWluYWlzdXVkZXQiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIlZhbGl0c2Uga2Fuc2lvIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJQZXJ1dXRhIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlRpZXRvamEgJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzMsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxMCwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgMzAsIDEwLCAxMzcsIDEwCiBMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKIExURVhUICJXaW5lOm4gdG9pIFNpbnVsbGU6IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiQW5uYSBvaGplbG1hLCBkb2t1bWVudHRpLCB0YWkgSW50ZXJuZXQgLXJlc3Vyc3NpLCBqYSBXaW5lIGF2YWEgc2VuIFNpbnVsbGUuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIiZBdmFhOiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJQZXJ1dXRhIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJlNlbGFhLi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAgICAgLyogY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3ICovCglJRFNfU0hWX0NPTFVNTjEJCSJUaWVkb3N0byIKCUlEU19TSFZfQ09MVU1OMgkJIktva28iCglJRFNfU0hWX0NPTFVNTjMJCSJUeXlwcGkiCglJRFNfU0hWX0NPTFVNTjQJCSJNdW9rYXR0dSIKCUlEU19TSFZfQ09MVU1ONQkJIk9taW5haXN1dWRldCIKCUlEU19TSFZfQ09MVU1ONgkJIktva28iCglJRFNfU0hWX0NPTFVNTjcJCSJUaWxhYSBq5GxqZWxs5CIKCUlEU19TSFZfQ09MVU1OOAkJIk5pbWkiCglJRFNfU0hWX0NPTFVNTjkJCSJLb21tZW50aXQiCglJRFNfU0hWX0NPTFVNTjEwCSJPbWlzdGFqYSIKCUlEU19TSFZfQ09MVU1OMTEJIlJ5aG3kIgoKICAgICAgICAvKiBzcGVjaWFsIGZvbGRlcnMgKi8KCUlEU19ERVNLVE9QCQkiVHn2cPZ5dOQiCglJRFNfTVlDT01QVVRFUgkJIk9tYSB0aWV0b2tvbmUiCgogICAgICAgIC8qIGNvbnRleHQgbWVudXMgKi8KCUlEU19WSUVXX0xBUkdFCQkiJlN1dXJldCBrdXZha2tlZXQiCglJRFNfVklFV19TTUFMTAkJIiZQaWVuZXQga3V2YWtrZWV0IgoJSURTX1ZJRVdfTElTVAkJIiZMaXN0YSIKCUlEU19WSUVXX0RFVEFJTFMJIiZUaWVkb3QiCglJRFNfU0VMRUNUCQkiVmFsaXRzZSIKCUlEU19PUEVOCQkiQXZhYSIKCglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAiVXV0dGEga2Fuc2lvdGEgZWkgdm9pdHUgbHVvZGE6IE9pa2V1ZGV0IGVpduR0IHJpaXTkLiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiVmlyaGUgbHVvdGFlc3NhIHV1dHRhIGthbnNpb3RhIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiVmFodmlzdGEgdGllZG9zdG9uIHR1aG9hbWluZW4iCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIlZhaHZpc3RhIGthbnNpb24gdHVob2FtaW5lbiIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIkhhbHVhdGtvIHZhcm1hc3RpIHR1aG90YSAnJTEnOm4/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIkhhbHVhdGtvIHZhcm1hc3RpIHR1aG90YSBu5G3kICUxPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIllsaWtpcmpvaXRhIHRpZWRvc3RvICUxPyIKCUlEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04gIlZhaHZpc3RhIHRpZWRvc3RvbiB5bGlraXJqb2l0dXMiCgogICAgICAgIC8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KICAgICAgICBJRFNfUkVTVEFSVF9USVRMRSAgICAgICAiS+R5bm5pc3TkIHV1ZGVsbGVlbiIKICAgICAgICBJRFNfUkVTVEFSVF9QUk9NUFQgICAgICAiSGFsdWF0a28gc2ltdWxvaWRhIFdpbmRvd3NpbiB1dWRlbGxlZW5r5HlubmlzdORtaXN05D8iCiAgICAgICAgSURTX1NIVVRET1dOX1RJVExFICAgICAgIlNhbW11dGEiCiAgICAgICAgSURTX1NIVVRET1dOX1BST01QVCAgICAgIkhhbHVhdGtvIGxvcGV0dGFhIFdpbmUtaXN0dW5ub24/IgoKICAgICAgICAvKiBzaGVsbCBmb2xkZXIgcGF0aCBkZWZhdWx0IHZhbHVlcyAqLwoJSURTX1BST0dSQU1TICAgICAgICAgICAgICAgICJL5HlubmlzdOQtdmFsaWtrb1xcT2hqZWxtYXQiCglJRFNfUEVSU09OQUwgICAgICAgICAgICAgICAgIk9tYXQgdGllZG9zdG90IgoJSURTX0ZBVk9SSVRFUyAgICAgICAgICAgICAgICJTdW9zaWtpdCIKCUlEU19TVEFSVFVQICAgICAgICAgICAgICAgICAiS+R5bm5pc3TkLXZhbGlra29cXE9oamVsbWF0XFxL5HlubmlzdHlzIgoJSURTX1JFQ0VOVCAgICAgICAgICAgICAgICAgICLEc2tldHTkaW4ga+R5dGV0eXQiCglJRFNfU0VORFRPICAgICAgICAgICAgICAgICAgIkzkaGV05CIKCUlEU19TVEFSVE1FTlUgICAgICAgICAgICAgICAiS+R5bm5pc3TkLXZhbGlra28iCglJRFNfTVlNVVNJQyAgICAgICAgICAgICAgICAgIk9tYXQgbXVzaWlra2l0aWVkb3N0b3QiCglJRFNfTVlWSURFTyAgICAgICAgICAgICAgICAgIk9tYXQgdmlkZW90aWVkb3N0b3QiCglJRFNfREVTS1RPUERJUkVDVE9SWSAgICAgICAgIlR59nD2eXTkIgoJSURTX05FVEhPT0QgICAgICAgICAgICAgICAgICJWZXJra295bXDkcmlzdPYiCglJRFNfVEVNUExBVEVTICAgICAgICAgICAgICAgIk1hbGxpdCIKCUlEU19BUFBEQVRBICAgICAgICAgICAgICAgICAiT2hqZWxtaWVuIHRpZWRvdCIKCUlEU19QUklOVEhPT0QgICAgICAgICAgICAgICAiVHVsb3N0aW55bXDkcmlzdPYiCglJRFNfTE9DQUxfQVBQREFUQSAgICAgICAgICAgIlBhaWthbGxpc2V0IGFzZXR1a3NldFxcT2hqZWxtaWVuIHRpZWRvdCIKCUlEU19JTlRFUk5FVF9DQUNIRSAgICAgICAgICAiUGFpa2FsbGlzZXQgYXNldHVrc2V0XFxW5GxpYWlrYWlzZXQgSW50ZXJuZXQtdGllZG9zdG90IgoJSURTX0NPT0tJRVMgICAgICAgICAgICAgICAgICJFduRzdGVldCIKCUlEU19ISVNUT1JZICAgICAgICAgICAgICAgICAiUGFpa2FsbGlzZXQgYXNldHVrc2V0XFxIaXN0b3JpYSIKCUlEU19QUk9HUkFNX0ZJTEVTICAgICAgICAgICAiT2hqZWxtYXRpZWRvc3RvdCIKCUlEU19NWVBJQ1RVUkVTICAgICAgICAgICAgICAiT21hdCBrdXZhdGllZG9zdG90IgoJSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICAgICJPaGplbG1hdGllZG9zdG90XFxZaHRlaXNldCB0aWVkb3N0b3QiCglJRFNfQ09NTU9OX0RPQ1VNRU5UUyAgICAgICAgIkRva3VtZW50aXQiCglJRFNfQURNSU5UT09MUyAgICAgICAgICAgICAgIkvkeW5uaXN05C12YWxpa2tvXFxPaGplbG1hdFxcQWRtaW5pc3RyYXRpdmUgVG9vbHMiCglJRFNfQ09NTU9OX01VU0lDICAgICAgICAgICAgIkRva3VtZW50aXRcXE9tYXQgbXVzaWlra2l0aWVkb3N0b3QiCglJRFNfQ09NTU9OX1BJQ1RVUkVTICAgICAgICAgIkRva3VtZW50aXRcXE9tYXQga3V2YXRpZWRvc3RvdCIKCUlEU19DT01NT05fVklERU8gICAgICAgICAgICAiRG9rdW1lbnRpdFxcT21hdCB2aWRlb3RpZWRvc3RvdCIKCUlEU19DREJVUk5fQVJFQSAgICAgICAgICAgICAiUGFpa2FsbGlzZXQgYXNldHVrc2V0XFxPaGplbG1pZW4gdGllZG90XFxNaWNyb3NvZnRcXENEIEJ1cm5pbmciCn0K