LyoKICogV2luZU1pbmUKICogRmlubmlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA1IEtpbW1vIE15bGx5dmlydGEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GSU5OSVNILCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgIldpbmVNaW5lIgogICAgIElEU19OT0JPRFksICAiRWkga3VrYWFuIgp9CgpNRU5VX1dJTkVNSU5FIE1FTlUgRElTQ0FSREFCTEUKewogICAgUE9QVVAgIiZWYWxpbm5hdCIgewogICAgICAgIE1FTlVJVEVNICImVXVzaVx0RjIiLCAgICAgIElETV9ORVcKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk1lcmtpdHNlIiwgICAgICBJRE1fTUFSS1EKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkFsb2l0dGVsaWphIiwgICBJRE1fQkVHSU5ORVIKICAgICAgICBNRU5VSVRFTSAiJktlaGl0dHlueXQiLCAgICBJRE1fQURWQU5DRUQKICAgICAgICBNRU5VSVRFTSAiJkV4cGVydHRpIiwgICAgICBJRE1fRVhQRVJUCiAgICAgICAgTUVOVUlURU0gIk11a2F1JnRhIiwgICAgICAgSURNX0NVU1RPTQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUG9pc3R1XHRBbHQrWCIsICBJRE1fRVhJVAogICAgfQogICAgUE9QVVAgIiZJbmZvIiB7CiAgICAgICAgTUVOVUlURU0gIiZOb3BlaW1tYXQgYWphdCIsIElETV9USU1FUwogICAgICAgIE1FTlVJVEVNICImVGlldG9qYSIsICAgICAgICAgSURNX0FCT1VUCiAgICB9Cn0KCkRMR19USU1FUyBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMTYwLCA4MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJOb3BlaW1tYXQgQWphdCIKewogICAgR1JPVVBCT1ggICAgICAgICJOb3BlaW1tYXQgQWphdCIsSURJR05PUkUsICAxMCwgIDEwLCAxNDAsICA0NQogICAgTFRFWFQgICAgICAgICAgICJBbG9pdHRlbGlqYSIsICAgSURJR05PUkUsICAyMCwgIDIwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICJLZWhpdHR5bnl0IiwgICAgSURJR05PUkUsICAyMCwgIDMwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICJFeHBlcnR0aSIsICAgICAgSURJR05PUkUsICAyMCwgIDQwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTEsICA3MCwgIDIwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTIsICA3MCwgIDMwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTMsICA3MCwgIDQwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTEsICA5MCwgIDIwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTIsICA5MCwgIDMwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTMsICA5MCwgIDQwLCAgNTUsICAgOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgICAgICAgICAgIElET0ssICA1NSwgIDYwLCAgNTAsICAxNQp9CgpETEdfQ09OR1JBVFMgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxNjAsIDYwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIk9ubml0dGVsdXQhIgp7CiAgICBMVEVYVCAgICAgICAgICAgIkFubmEgbmltZXNpIiwgSURJR05PUkUsICAxMCwgIDEwLCAxNTAsICAxMAogICAgRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRENfRURJVE5BTUUsICAyNSwgIDIwLCAxMTAsICAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgICAgICAgICAgICAgICAgICAgIElET0ssICA2MCwgIDQwLCAgNDAsICAxNQp9CgpETEdfQ1VTVE9NIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTAwLCAxMDAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiTXVrYXV0ZXR0dSBQZWxpIgp7CiAgICBMVEVYVCAgICAgICAgICAgIlJpdmVq5CIsICAgSURJR05PUkUsICAgNSwgICA1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJQYWxzdG9qYSIsICAgSURJR05PUkUsICAgNSwgIDM1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJNaWlub2phIiwgIElESUdOT1JFLCAgIDUsICA2NSwgIDMwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICBJRENfRURJVFJPV1MsICAgNSwgIDE1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgSURDX0VESVRDT0xTLCAgIDUsICA0NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgSURDX0VESVRNSU5FUywgICA1LCAgNzUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgSURPSywgICAgICA0MCwgIDMwLCAgNTAsICAxNQogICAgUFVTSEJVVFRPTiAgICAgICJQZXJ1dXRhIiwgSURDQU5DRUwsICA0MCwgIDUwLCAgNTAsICAxNQp9CgpETEdfQUJPVVQgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxNjAsIDgwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIlRpZXRvamEiCnsKICAgIExURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaW5lbWluZSIsIElESUdOT1JFLCAgMTAsICAxMCwgIDUwLCAgMTAKICAgIExURVhUICAgICAgICAgIkNvcHlyaWdodCAyMDAwLCBKb3NodWEgVGhpZWxlbiIsIElESUdOT1JFLCAgMzUsICAyNSwgMTE1LCAgMTAKICAgIExURVhUICAgICAgICAgICAgICAgICAiTGljZW5zZWQgdW5kZXIgdGhlIExHUEwiLCBJRElHTk9SRSwgIDM1LCAgMzUsIDExNSwgIDEwCiAgICBJQ09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0lORU1JTkUiLCBJRElHTk9SRSwgIDEwLCAgMjUsICAyMCwgIDIwCiAgICBERUZQVVNIQlVUVE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0siLCBJRE9LLCAgICAgIDUwLCAgNjAsICA2MCwgIDE1Cn0K