LyoKICogRGFuaXNoIGxhbmd1YWdlIHJlc291cmNlIGZpbGUgZm9yIENyZWRlbnRpYWxzIFVJCiAqCiAqIENvcHlyaWdodCAyMDA4IEplbnMgQWxicmV0c2VuCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJjcmVkdWlfcmVzb3VyY2VzLmgiCgpMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ERUZBVUxUCgpJRERfQ1JFRERJQUxPRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDIxMywgMTQ5ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBEU19DRU5URVIgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIklEU19USVRMRUZPUk1BVCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgQ09OVFJPTCAgICAgICAgIElEQl9CQU5ORVIsLTEsIlN0YXRpYyIsU1NfQklUTUFQIHwgU1NfQ0VOVEVSSU1BR0UsMCwKICAgICAgICAgICAgICAgICAgICAwLDIxMywzNwogICAgTFRFWFQgICAgICAgICAgICJJRFNfTUVTU0FHRUZPUk1BVCIsSURDX01FU1NBR0UsOCw0OCwxOTksOCxOT1QgV1NfR1JPVVAKICAgIExURVhUICAgICAgICAgICAiJkJydWdlcm5hdm46IiwtMSw4LDYyLDcyLDEyLFNTX0NFTlRFUklNQUdFCiAgICBDT05UUk9MICAgICAgICAgIiIsSURDX1VTRVJOQU1FLCJDb21ib0JveEV4MzIiLENCU19EUk9QRE9XTiB8CiAgICAgICAgICAgICAgICAgICAgQ0JTX05PSU5URUdSQUxIRUlHSFQgfCBXU19UQUJTVE9QLDgwLDYyLDEyNiw4NwogICAgTFRFWFQgICAgICAgICAgICImS29kZW9yZDoiLC0xLDgsODAsNzIsMTIsU1NfQ0VOVEVSSU1BR0UKICAgIEVESVRURVhUICAgICAgICBJRENfUEFTU1dPUkQsODAsODAsMTI2LDEyLEVTX1BBU1NXT1JEIHwgRVNfQVVUT0hTQ1JPTEwKICAgIENPTlRST0wgICAgICAgICAiJkh1c2sgbWl0IGtvZGVvcmQiLElEQ19TQVZFLCJCdXR0b24iLAogICAgICAgICAgICAgICAgICAgIEJTX0FVVE9DSEVDS0JPWCB8IFdTX1RBQlNUT1AsODAsOTgsMTI2LDEyCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDk3LDEyOCw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICJBbm51bGxlciIsSURDQU5DRUwsMTU2LDEyOCw1MCwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19USVRMRUZPUk1BVCAgICAgIlRpbHNsdXQgdGlsICVzIgogICAgSURTX01FU1NBR0VGT1JNQVQgICAiVGlsc2x1dHRlciB0aWwgJXMiCiAgICBJRFNfSU5DT1JSRUNUUEFTU1dPUkRUSVRMRSAgIlRpbHNsdXRuaW5nIGZlamxlZGUiCiAgICBJRFNfSU5DT1JSRUNUUEFTU1dPUkQgICAgICAgIlbmciBzaWtrZXIgcOUgYXQgZGl0IGJydWdlcm5hdm5cbm9nIGtvZGVvcmQgZXIga29ycmVrdC4iCiAgICBJRFNfQ0FQU0xPQ0tPTlRJVExFICJDYXBzIExvY2sgZXIgcOUiCiAgICBJRFNfQ0FQU0xPQ0tPTiAgICAgICJDYXBzIExvY2sga2FuIHbmcmUgc2t5bGQgaSBhdCB0YXN0ZXIgZGl0IGtvZGVvcmQgZm9ya2VydC5cblxuVHJ5ayBw5SBDYXBzIExvY2sgdGFzdGVuIGZvciBhdCBzbOUgZGV0IGZyYVxuZvhyIGR1IGluZHRhc3RlciBkaXQga29kZW9yZC4iCn0K