LyoKICogSGVscCBWaWV3ZXIKICogUG9ydHVndWVzZSBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKICogUG9ydHVndWVzZSB0cmFuc2xhdGlvbiBieSBHdXN0YXZvIEp1bmlvciBBbHZlcyA8YWx2ZXNAY29ycmVpb25ldC5jb20uYnI+CiAqIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKiBDb3B5cmlnaHQgMjAwMyBNYXJjZWxvIER1YXJ0ZQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfREVGQVVMVAoKLyogTWVudSAqLwpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkFycXVpdm8iIHsKICBNRU5VSVRFTSAiJkFicmlyLi4uIiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkltcHJpbWlyIiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIiZDb25maWd1cmFyIEltcHJlc3NvcmEuLi4iLCBNTklEX0ZJTEVfU0VUVVAKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlNhaSZyIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImRWRpdGFyIiB7CiAgIE1FTlVJVEVNICImQ29waWFyLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImQW5vdGFyLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiSW4mZGljYWRvciIgewogICBNRU5VSVRFTSAiJkRlZmluaXIuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiQWomdWRhIiB7CiAgIE1FTlVJVEVNICJBanVkYSAmbmEgYWp1ZGEiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICJTZW1wcmUgJnZpc+12ZWwiLCBNTklEX0hFTFBfSEVMUFRPUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZJbmZvcm1h5/Vlcy4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiJlNvYnJlIFdJTkUiLCBNTklEX0hFTFBfV0lORQojZW5kaWYKIH0KfQoKLyogU3RyaW5ncyAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVElEX1dJTkVfSEVMUCwgCSJBanVkYSBXSU5FIgpTVElEX1dIRVJST1IsIAkJIkVSUk8iClNUSURfV0FSTklORywgIAkJIkFWSVNPIgpTVElEX0lORk8sICAJCSJJbmZvcm1h5+NvIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSJO428gaW1wbGVtZW50YWRvIgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJFcnJvIGVuY29udHJhZG8gbmEgbGVpdHVyYSBkbyBhcnF1aXZvIGRlIGFqdWRhICclcyciClNUSURfQ09OVEVOVFMsIAkJIiZDb250ZfpkbyIKU1RJRF9TRUFSQ0gsIAkJIiZQcm9jdXJhciIKU1RJRF9CQUNLLCAJCSImVm9sdGFyIgpTVElEX0hJU1RPUlksIAkJIiZIaXN083JpY28iClNUSURfVE9QSUNTLAkJIiZU83BpY29zIgpTVElEX0FMTF9GSUxFUywgCSJUb2RvcyBvcyBhcnF1aXZvcyAoKi4qKSIKU1RJRF9IRUxQX0ZJTEVTX0hMUCwgCSJBcnF1aXZvcyBkZSBhanVkYSAoKi5obHApIgp9Cg==