LyoKICogQ29weXJpZ2h0IDIwMDQsIDIwMDcgSm9z6SBNYW51ZWwgRmVycmVyIE9ydGl6CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJyZXNvdXJjZS5oIgoKTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX05FVVRSQUwKClVJSU5TRVJUT0JKRUNUIERJQUxPRyAgMCwgMCwgMjk0LCAxNTEKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSW5zZXJ0YXIgb2JqZXRvIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMSVNUQk9YICAgICAgICAgSURDX09CSlRZUEVMSVNULDgyLDE5LDEzMSw2NixMQlNfU09SVCB8CiAgICAgICAgICAgICAgICAgICAgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBXU19WSVNJQkxFIHwgV1NfVlNDUk9MTCB8CiAgICAgICAgICAgICAgICAgICAgV1NfVEFCU1RPUAogICAgTFRFWFQgICAgICAgICAgICJUaXBvIGRlIG9iamV0bzoiLElEQ19PQkpUWVBFTEJMLDgyLDcsNTMsOCxXU19WSVNJQkxFCiAgICBERUZQVVNIQlVUVE9OICAgIkFjZXB0YXIiLElET0ssMjIxLDcsNjYsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQ2FuY2VsYXIiLElEQ0FOQ0VMLDIyMSwyNCw2NiwxNAogICAgR1JPVVBCT1ggICAgICAgICJSZXN1bHRhZG8iLElEQ19SRVNVTFQsNywxMDMsMjA4LDQxCiAgICBDT05UUk9MICAgICAgICAgIkNyZWFyIG51ZXZvIixJRENfQ1JFQVRFTkVXLCJCdXR0b24iLEJTX0FVVE9SQURJT0JVVFRPTiB8IAogICAgICAgICAgICAgICAgICAgIFdTX0dST1VQLDcsMjAsNjIsMTAKICAgIENPTlRST0wgICAgICAgICAiQ3JlYXIgY29udHJvbCIsSURDX0NSRUFURUNPTlRST0wsIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT1JBRElPQlVUVE9OIHwgTk9UIFdTX1ZJU0lCTEUsNyw1NCw2MiwxMAogICAgQ09OVFJPTCAgICAgICAgICJDcmVhciBkZXNkZSBhcmNoaXZvIixJRENfQ1JFQVRFRlJPTUZJTEUsIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT1JBRElPQlVUVE9OLDcsMzcsNjcsMTAKICAgIExURVhUICAgICAgICAgICAiIixJRENfUkVTVUxUREVTQyw0OSwxMTIsMTU5LDIzCiAgICBQVVNIQlVUVE9OICAgICAgIiZB8WFkaXIgY29udHJvbC4uLiIsSURDX0FERENPTlRST0wsODEsODgsNjMsMTQsTk9UIFdTX1ZJU0lCTEUKICAgIENPTlRST0wgICAgICAgICAiTW9zdHJhciBjb21vIGljb25vIixJRENfQVNJQ09OLCJCdXR0b24iLEJTX0FVVE9DSEVDS0JPWCB8IAogICAgICAgICAgICAgICAgICAgIFdTX1RBQlNUT1AgfCBOT1QgV1NfVklTSUJMRSwyMjMsNTgsNjQsMTAKICAgIFBVU0hCVVRUT04gICAgICAiRXhwbG9yYXIuLi4iLElEQ19CUk9XU0UsODMsNTMsNTAsMTQsTk9UIFdTX1ZJU0lCTEUKICAgIExURVhUICAgICAgICAgICAiQXJjaGl2bzoiLElEQ19GSUxFTEJMLDgzLDI3LDIwLDgsIE5PVCBXU19WSVNJQkxFCiAgICBFRElUVEVYVCAgICAgICAgSURDX0ZJTEUsODMsMzcsMTMyLDEzLEVTX0FVVE9IU0NST0xMIHwgTk9UIFdTX1ZJU0lCTEUKRU5ECgpJRERfUEFTVEVTUEVDSUFMNCBESUFMT0cgMywgMTUsIDI5MywgMTQwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJQZWdhZG8gZXNwZWNpYWwiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgIk9yaWdlbjoiLCAtMSwgNiwgOSwgMzAsIDgsIFdTX1ZJU0lCTEUgfCBXU19HUk9VUAogICAgQ09OVFJPTCAgICAgICAiJlBlZ2FyIiwgSURDX1BTX1BBU1RFLCAiQnV0dG9uIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVklTSUJMRSwKICAgICAgICAgICAgICAgICAgNiwgMzgsIDU1LCAxMAogICAgQ09OVFJPTCAgICAgICAiUGVnYXIgJmVubGFjZSIsIElEQ19QU19QQVNURUxJTkssICJCdXR0b24iLCBCU19BVVRPUkFESU9CVVRUT04gfCBXU19WSVNJQkxFLAogICAgICAgICAgICAgICAgICA2LCA2MywgNTUsIDEwCiAgICBMVEVYVCAgICAgICAgICImQ29tbzoiLCAtMSwgNjUsIDI1LCAxNiwgOCwgV1NfVklTSUJMRSB8IFdTX0dST1VQCiAgICBMSVNUQk9YICAgICAgIElEQ19QU19QQVNURUxJU1QsICAgICA2NSwgMzYsIDE1MywgNTcsIExCU19OT1RJRlkgfCBMQlNfVVNFVEFCU1RPUFMgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSIHwgTk9UIFdTX1ZJU0lCTEUKICAgIExJU1RCT1ggICAgICAgSURDX1BTX1BBU1RFTElOS0xJU1QsIDY1LCAzNiwgMTUzLCA1NywgTEJTX05PVElGWSB8IExCU19VU0VUQUJTVE9QUyB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIgfCBOT1QgV1NfVklTSUJMRQogICAgTElTVEJPWCAgICAgICBJRENfUFNfRElTUExBWUxJU1QsICAgNjUsIDM2LCAxNTMsIDU3LCBMQlNfTk9USUZZIHwgTEJTX1VTRVRBQlNUT1BTIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1ZJU0lCTEUKICAgIENPTlRST0wgICAgICAgIkFjZXB0YXIiLCBJRE9LLCAiQnV0dG9uIiwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZJU0lCTEUsIDIyNCwgNiwgNjYsIDE0CiAgICBDT05UUk9MICAgICAgICJDYW5jZWxhciIsIElEQ0FOQ0VMLCAiQnV0dG9uIiwgQlNfUFVTSEJVVFRPTiB8IFdTX1RBQlNUT1AgfCBXU19WSVNJQkxFLCAyMjQsIDIzLCA2NiwgMTQKICAgIENPTlRST0wgICAgICAgIkEmeXVkYSIsIElEQ19PTEVVSUhFTFAsICJCdXR0b24iLCBCU19QVVNIQlVUVE9OIHwgV1NfVEFCU1RPUCB8IFdTX1ZJU0lCTEUsIDIyNCwgNDIsIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAiJk1vc3RyYXIgY29tbyBpY29ubyIsIElEQ19QU19ESVNQTEFZQVNJQ09OLCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCB8IFdTX1ZJU0lCTEUsIDIyNCwgNTksIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAiIiwgSURDX1BTX0lDT05ESVNQTEFZLCAiU3RhdGljIiwgU1NfSUNPTiB8IFdTX1ZJU0lCTEUsIDIyNCwgNzUsIDY2LCA0NAogICAgQ09OVFJPTCAgICAgICAiQ2FtYmlhciAmaWNvbm8uLi4iLCBJRENfUFNfQ0hBTkdFSUNPTiwgIkJ1dHRvbiIsIEJTX1BVU0hCVVRUT04gfCBXU19UQUJTVE9QIHwgV1NfVklTSUJMRSwgMjI0LCAxMjMsIDY2LCAxNAogICAgQ09OVFJPTCAgICAgICAiIiwgSURDX1BTX1JFU1VMVElNQUdFLCAiU3RhdGljIiwgU1NfSUNPTiB8IFdTX1ZJU0lCTEUsIDgsIDEwMSwgNDIsIDM0CiAgICBDT05UUk9MICAgICAgICI8PCBlbCB0ZXh0byBkZWwgcmVzdWx0YWRvIHZhIGFxde0gPj4iLCBJRENfUFNfUkVTVUxUVEVYVCwgIlN0YXRpYyIsIFNTX05PUFJFRklYIHwgV1NfVklTSUJMRSwgNTQsIDEwMCwgMTU5LCAzNQogICAgQ09OVFJPTCAgICAgICAiUmVzdWx0YWRvIiwgLTEsICJCdXR0b24iLCBCU19HUk9VUEJPWCB8IFdTX0dST1VQIHwgV1NfVklTSUJMRSwgNiwgOTAsIDIxMiwgNDgKICAgIENPTlRST0wgICAgICAgIiIsIElEQ19QU19TT1VSQ0VURVhULCAiRWRpdCIsIEVTX1JFQURPTkxZIHwgRVNfQVVUT0hTQ1JPTEwgfCBXU19WSVNJQkxFLCAzNywgOSwgMTgwLCA4CkVORAo=