LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1NMT1ZBSywgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImU/pib3IiIHsKICAgTUVOVUlURU0gIiZPdHZvcmmdLi4uIiwgTU5JRF9GSUxFX09QRU4KICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImVGxh6GmdIiwgTU5JRF9GSUxFX1BSSU5UCiAgIE1FTlVJVEVNICImTmFzdGF2ZW5pZSB0bGHoZS4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIlUma29u6GmdIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImVXByYXZpnSIgewogICBNRU5VSVRFTSAiS29w7SZyb3ZhnS4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJlNrb21lbnRvdmGdLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiJlrhbG+ea2EiIHsKICAgTUVOVUlURU0gIiZEZWZpbm92YZ0uLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJk9wdGlvbnMiIHsKICAgUE9QVVAJIkhlbHAgYWx3YXlzIHZpc2libGUiCiAgIEJFR0lOCiAgICAgTUVOVUlURU0gIkRlZmF1bHQiLAlNTklEX09QVFNfSEVMUF9ERUZBVUxUCiAgICAgTUVOVUlURU0gIlZpc2libGUiLAlNTklEX09QVFNfSEVMUF9WSVNJQkxFCiAgICAgTUVOVUlURU0gIk5vbiB2aXNpYmxlIiwJTU5JRF9PUFRTX0hFTFBfTk9OVklTSUJMRQogIEVORAogIE1FTlVJVEVNICJIaXN0b3J5IiwJCU1OSURfT1BUU19ISVNUT1JZCiAgUE9QVVAgICAgIkZvbnRzIgogIEJFR0lOCiAgICBNRU5VSVRFTSAiU21hbGwiLAkJTU5JRF9PUFRTX0ZPTlRTX1NNQUxMCiAgICBNRU5VSVRFTSAiTm9ybWFsIiwgICAgCU1OSURfT1BUU19GT05UU19OT1JNQUwKICAgIE1FTlVJVEVNICJMYXJnZSIsICAgICAJTU5JRF9PUFRTX0ZPTlRTX0xBUkdFCiAgRU5ECiAgTUVOVUlURU0gIlVzZSBzeXN0ZW0gY29sb3JzIiwJTU5JRF9PUFRTX1NZU1RFTV9DT0xPUlMKIH0KIFBPUFVQICImUG9tb2MiIHsKICAgTUVOVUlURU0gIlBvbW9jICZuYSBwb21vY2kiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICJWnmR5IG5hICZ2cmNodSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkluZm8uLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIk8mIFdJTkUiLCBNTklEX0hFTFBfV0lORQojZW5kaWYKIH0KfQoKLyogU3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1NMT1ZBSywgU1VCTEFOR19ERUZBVUxUCnsKU1RJRF9XSU5FX0hFTFAsICAgICAgICAgICAgICJXSU5FIFBvbW9jIgpTVElEX1dIRVJST1IsICAgICAgICAgICAgICAgIkNIWUJBIgpTVElEX1dBUk5JTkcsICAgICAgICAgICAgICAgIlZBUk9WQU5JRSIKU1RJRF9JTkZPLCAgICAgICAgICAgICAgICAgICJJbmZvcm3hY2llIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgICAgICAgIk5laW1wbGVtZW50b3ZhbukiClNUSURfSExQRklMRV9FUlJPUl9zLCAgICAgICAiQ2h5YmEgcG/oYXMg6O10YW5pYSBz+mJvcnUgYCVzJyIKU1RJRF9JTkRFWCwgICAgICAgICAgICAgICAgICImT2JzYWgiClNUSURfQ09OVEVOVFMsCQkgICAgIlN1bW1hcnkiClNUSURfQkFDSywgICAgICAgICAgICAgICAgICAiJlNw5J0iClNUSURfQUxMX0ZJTEVTLCAgICAgICAgICAgICAiVppldGt5IHP6Ym9yeSAoKi4qKSIKU1RJRF9IRUxQX0ZJTEVTX0hMUCwgICAgICAgICJT+mJvcnkgcG9tb2NpICgqLmhscCkiClNUSURfRklMRV9OT1RfRk9VTkRfcyAgICAgICAiQ2Fubm90IGZpbmQgJyVzJy4gRG8geW91IHdhbnQgdG8gZmluZCB0aGlzIGZpbGUgeW91cnNlbGY/IgpTVElEX05PX1JJQ0hFRElUCSAgICAiQ2Fubm90IGZpbmQgYSByaWNoZWRpdCBpbXBsZW1lbnRhdGlvbi4uLiBBYm9ydGluZyIKU1RJRF9QU0hfSU5ERVgsCQkiSGVscCB0b3BpY3M6ICIKfQo=