LyoKICogQ29tY3RsMzIKICogRnJlbmNoIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IDE5OTkgRXJpYyBLb2hsCiAqIENvcHlyaWdodCAyMDAzIFZpbmNlbnQgQulyb24KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKSUREX1BST1BTSEVFVCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjIwLCAxNDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19WSVNJQkxFCkNBUFRJT04gIlByb3Byael06XMgcG91ciAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICJPSyIsICAgICBJRE9LLDQsMTIyLDUwLDE0LCBXU19UQUJTVE9QIHwgV1NfR1JPVVAKICBQVVNIQlVUVE9OICAgICJBbm51bGVyIiwgSURDQU5DRUwsNTgsMTIyLDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiJkFwcGxpcXVlciIsIElEQ19BUFBMWV9CVVRUT04sMTEyLDEyMiw1MCwxNCxXU19ESVNBQkxFRAogIFBVU0hCVVRUT04gICAgIkFpZGUiLCAgIElESEVMUCwxNjYsMTIyLDUwLDE0LFdTX1RBQlNUT1B8V1NfR1JPVVAKICBDT05UUk9MICAgICAgICJvbmdsZXQiLCBJRENfVEFCQ09OVFJPTCwiU3lzVGFiQ29udHJvbDMyIixXU19DTElQU0lCTElOR1N8V1NfR1JPVVB8V1NfVEFCU1RPUHxUQ1NfTVVMVElMSU5FLDQsNCwyMTIsMTE0CkVORAoKCklERF9XSVpBUkQgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI5MCwgMTU5ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRQpDQVBUSU9OICJBc3Npc3RhbnQiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICJUZXJtaW5lciIsIElEQ19GSU5JU0hfQlVUVE9OLDEyMSwxMzgsNTAsMTQKICBERUZQVVNIQlVUVE9OICImU3VpdmFudCA+IiwgSURDX05FWFRfQlVUVE9OLDEyMSwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICI8ICZQculj6WRlbnQiLCBJRENfQkFDS19CVVRUT04sNzEsMTM4LDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiQW5udWxlciIsIElEQ0FOQ0VMLDE3OCwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICJBaWRlIiwgICAgSURIRUxQLDIzNSwxMzgsNTAsMTQsV1NfR1JPVVAKICBMVEVYVCAgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FLDcsMTI5LDI3OCwxLFNTX1NVTktFTgogIENPTlRST0wgICAgICAgIk9uZ2xldCIsICBJRENfVEFCQ09OVFJPTCwiU3lzVGFiQ29udHJvbDMyIixXU19DTElQU0lCTElOR1MgfCBXU19ESVNBQkxFRCw3LDcsMjU4LDUKICBMVEVYVAkgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FSEVBREVSLDAsMzUsMjkwLDEsU1NfTEVGVCB8IFNTX1NVTktFTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRQpFTkQKCgpJRERfVEJDVVNUT01JWkUgRElBTE9HIERJU0NBUkRBQkxFIDEwLCAyMCwgMzU3LCAxMjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlBlcnNvbm5hbGlzZXIgbGEgYmFycmUgZCdvdXRpbHMiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICImRmVybWVyIiwgIElEQ0FOQ0VMLDMwOCw2LDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiJlLpaW5pdGlhbGlzZXIiLCBJRENfUkVTRVRfQlROLDMwOCwyMyw0NCwxNAogIFBVU0hCVVRUT04gICAgIiZBaWRlIiwgICAgSURDX0hFTFBfQlROLDMwOCw0MCw0NCwxNAogIFBVU0hCVVRUT04gICAgIiZNb250ZXIiLCAgSURDX01PVkVVUF9CVE4sMzA4LDc0LDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiJkRlc2NlbmRyZSIsIElEQ19NT1ZFRE5fQlROLDMwOCw5MSw0NCwxNAogIExURVhUICAgICAgICAgIkJvdXRvbnMgZGlzcG9uaWJsZXMgOiIsIC0xLDQsNSw4NCwxMAogIExJU1RCT1ggICAgICAgSURDX0FWQUlMQlROX0xCT1gsNCwxNywxMjAsMTAwLCBMQlNfTk9USUZZIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCB8IFdTX1RBQlNUT1AKICBQVVNIQlVUVE9OICAgICJBJmpvdXRlciAtPiIsICAgIElET0ssIDEzMSwgNDIsIDQ0LCAxNAogIFBVU0hCVVRUT04gICAgIjwtICZFbmxldmVyIiwgSURDX1JFTU9WRV9CVE4sMTMxLDYyLDQ0LDE0CiAgTFRFWFQgICAgICAgICAiJkJvdXRvbnMgZGUgbGEgYmFycmUgZCdvdXRpbHMgOiIsIC0xLDE4Miw1LDc4LDEwCiAgTElTVEJPWCAgICAgICBJRENfVE9PTEJBUkJUTl9MQk9YLCAxODIsMTcsMTIwLDEwMCxMQlNfTk9USUZZIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCB8IFdTX1RBQlNUT1AKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfQ0xPU0UgICAgIkZlcm1lciIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURNX1RPREFZICAgICJBdWpvdXJkJ2h1aToiCiAgICBJRE1fR09UT0RBWSAgIkFsbGVyIOAgYXVqb3VyZCdodWkiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19TRVBBUkFUT1IgIlPpcGFyYXRldXIiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIEhLWV9OT05FICJBdWN1biIKfQo=