LyoKICogV2luZUZpbGUKICogSXRhbGlhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAwIE1hcnRpbiBGdWNocwogKiBDb3B5cmlnaHQgMjAwMiBTdGV2ZW4gRWR3YXJkcwogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQKICogQ29weXJpZ2h0IDIwMDQgSXZhbiBMZW8gUHVvdGkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19JVEFMSUFOLCBTVUJMQU5HX05FVVRSQUwKCi8qIE1lbnUgKi8KCklETV9XSU5FRklMRSBNRU5VIEZJWEVEIElNUFVSRQp7CglQT1BVUCAiJkZpbGUiICB7CgkJTUVOVUlURU0gIiZBcHJpXHRJbnZpbyIgLAkJCTEwMQoJCU1FTlVJVEVNICImU3Bvc3RhLi4uXHRGNyIgLCAJCQlJRF9GSUxFX01PVkUKCQlNRU5VSVRFTSAiJkNvcGlhLi4uXHRGOCIgLAkJCTEwNwoJCU1FTlVJVEVNICImTmVnbGkgQXBwdW50aS4uLlx0RjkiICwJCTExOAoJCU1FTlVJVEVNICImQ2FuY2VsbGFcdERlbCIgLAkJCTEwOAoJCU1FTlVJVEVNICJSaSZub21pbmEuLi4iICwJCQkxMDkKCQlNRU5VSVRFTSAiUHJvcHJpJmV04C4uLlx0QWx0K0ludmlvIiAsIElEX0VESVRfUFJPUEVSVElFUwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDJm9tcHJpbWkuLi4iICwJCTExOQoJCU1FTlVJVEVNICJEZWMmb21wcmltaS4uLiIgLAkJMTIwCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZFc2VndWkuLi4iICwJCQlJRF9FWEVDVVRFCgkJTUVOVUlURU0gIiZTdGFtcGEuLi4iICwgCQkJMTAyCgkJTUVOVUlURU0gIkFzc29jaWEuLi4iICwJCTEwMwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDciZlYSBEaXJlY3RvcnkuLi4iICwJCQkxMTEKCQlNRU5VSVRFTSAiQ2VyYyZhLi4uIiAsCQkJMTA0CgkJTUVOVUlURU0gIiZTZWxlemlvbmEgaSBmaWxlLi4uIiAsCQkJMTE2CgkJTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiRSZzY2lcdEFsdCtYIiAsIAkJCUlEX0ZJTEVfRVhJVAojZWxzZQoJCU1FTlVJVEVNICJFJnNjaSIsIAkJCQlJRF9GSUxFX0VYSVQKI2VuZGlmCgl9CgoJUE9QVVAgIiZEaXNjbyIgIHsKCQlNRU5VSVRFTSAiJkNvcGlhIERpc2NvLi4uIiAsCQkJMjAxCgkJTUVOVUlURU0gIiZFdGljaGV0dGEgRGlzY28uLi4iICwJCQkyMDIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkZvcm1hdHRhIERpc2NvLi4uIiAsCQkJMjAzCiNpZmRlZiBfV0lOOTUKCQlNRU5VSVRFTSAiJkNyZWEgRGlzY28gZGkgU2lzdGVtYS4uLiIsIC0xCS8qQEAgKi8KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkNvbm5ldHRpICYgRHJpdmUgZGkgUmV0ZSIgLAkJCTI1MgoJCU1FTlVJVEVNICImRGlzY29ubmV0dGkgRHJpdmUgZGkgUmV0ZSIgLAkJMjUzCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkNvbmRpdmlkaSBjb21lLi4uIiAsCQkJMjU0CgkJTUVOVUlURU0gIiZSaW11b3ZpIGNvbmRpdmlzaW9uZS4uLiIgLAkJCTI1NQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImU2VsZXppb25hIERyaXZlLi4uIiAsCQkJMjUxCgl9CgoJUE9QVVAgIiZEaXJlY3RvcnkiICB7CgkJTUVOVUlURU0gIiZMaXZlbGxvIFN1Y2Vzc2l2b1x0KyIgLAkJCTMwMQoJCU1FTlVJVEVNICJFc3BhbmRpICZBbGJlcm9cdCoiICwJCTMwMgoJCU1FTlVJVEVNICJFc3BhbmRpICZ0dXR0b1x0U3RyZysqIiAsCQkzMDMKCQlNRU5VSVRFTSAiUmlkdWNpICZBbGJlcm9cdC0iICwJCQkzMDQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlNlbGV6aW9uYSB1bml04CIgLAkJCQk1MDUKCX0KCglQT1BVUCAiJlZpc3VhbGl6emEiICB7CgkJTUVOVUlURU0gIkEmbGJlcm8gZSBEaXJlY3RvcnkiICwJCQk0MTMKCQlNRU5VSVRFTSAiU28mbG8gQWxiZXJvIiAsCQkJNDExCgkJTUVOVUlURU0gIiZTb2xvIERpcmVjdG9yeSIgLAkJCTQxMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJEaSZ2aWRpIiAsCQkJNDE0CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZOb21lIiAsCQkJSURfVklFV19OQU1FCgkJTUVOVUlURU0gIiZNb3N0cmEgdHV0dGkgaSBkZXR0YWdsaSBzdWkgZmlsZSIgLAkJCQlJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECgkJTUVOVUlURU0gIiZNb3N0cmEgZGV0dGFnbGkgcGFyemlhbGkuLi4iICwJCQlJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJk9yZGluYSBwZXIgTm9tZSIgLAkJNDA0CgkJTUVOVUlURU0gIiZPcmRpbmEgcGVyIFRpcG8iICwJCTQwNQoJCU1FTlVJVEVNICImT3JkaW5hIHBlciBEaW1lbnNpb25lIiAsIAkJNDA2CgkJTUVOVUlURU0gIiZPcmRpbmEgcGVyIERhdGEiICwgCQk0MDcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiT3JkaW5hIHBlciAmLi4uIiAsCQkJNDA5Cgl9CgoJUE9QVVAgIiZPcHppb25pIiAgewoJCU1FTlVJVEVNICImQ29uZmVybWF6aW9uZS4uLiIgLAkJLTEKCQlNRU5VSVRFTSAiJkZvbnQuLi4iICwJCQlJRF9TRUxFQ1RfRk9OVAoJCU1FTlVJVEVNICImUGVyc29uYWxpenphIGJhcnJhIGRlZ2xpIHN0cnVtZW50aS4uLiIgLCAtMQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImQmFycmEgZGVnbGkgc3RydW1lbnRpIiAsCQlJRF9WSUVXX1RPT0xfQkFSLCBDSEVDS0VECgkJTUVOVUlURU0gIiZCYXJyYSBkZWkgRHJpdmUiICwJCUlEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECgkJTUVOVUlURU0gIiZCYXJyYSBkaSBzdGF0byIgLAlJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIkEmIHR1dHRvIHNjaGVybW9cdEN0cmwrU2hpZnQrUyIgLCAJSURfVklFV19GVUxMU0NSRUVOCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImRXNlZ3VpIG1pbmltaXp6YXRvIiAsCQktMQoJCU1FTlVJVEVNICImU2FsdmEgaW1wb3N0YXppb25pIGFsbCd1c2NpdGEiICwJCQk1MTEKCX0KCgoJUE9QVVAgIiZTaWN1cmV6emEiICB7CgkJTUVOVUlURU0gIiZBY2Nlc3NpLi4uIiAsCQk2MDUKCQlNRU5VSVRFTSAiJkxvZ2dpbmcuLi4iICwJCQk2MDYKCQlNRU5VSVRFTSAiJlByb3ByaWV0YXJpby4uLiIgLAkJNjA3Cgl9CgoJUE9QVVAgIiZGaW5lc3RyYSIgIHsKCQlNRU5VSVRFTSAiTnVvdmEgJkZpbmVzdHJhIiAsCQkJSURfV0lORE9XX05FVwoJCU1FTlVJVEVNICJGaW5lc3RyZSBhIGNhc2NhdGFcdEN0cmwrRjUiICwJCUlEX1dJTkRPV19DQVNDQURFCgkJTUVOVUlURU0gIk9yZGluYSAmT3Jpem9udGFsbWVudGUiICwJCUlEX1dJTkRPV19USUxFX0hPUloKCQlNRU5VSVRFTSAiT3JkaW5hICZWZXJ0aWNsbWVudGVcdEN0cmwrRjQiICwJCUlEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICJEaXNwb25pIGF1dG9tYXRpY2FtZW50ZSIgLAkJSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgoJCU1FTlVJVEVNICJEaXNwb25pICZTaW1ib2xpIiAsCQlJRF9XSU5ET1dfQVJSQU5HRQoJCU1FTlVJVEVNICImQWdnaW9ybmFcdEY1IiAsCQlJRF9SRUZSRVNICgl9CgoJUE9QVVAgIiZHdWlkYSIgIHsKCQlNRU5VSVRFTSAiJlNvbW1hcmlvIGRlbGxhIEd1aWRhXHRGMSIgLAkJCUlEX0hFTFAKCQlNRU5VSVRFTSAiJkNlcmNhIG5lbGxhIEd1aWRhLi4uXHRGMSIgLAkJCUlEX0hFTFAKCQlNRU5VSVRFTSAiJlVzbyBkZWxsIEd1aWRhXHRGMSIgLAkJCUlEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlQT1BVUCAiSW5mby4uLiIgIHsKCQkgIE1FTlVJVEVNICJJbmZvcm1hemlvbmkgc3UgJldpbmUuLi4iICwJCQlJRF9BQk9VVF9XSU5FCi8qCiAqCQkgIE1FTlVJVEVNICImTGljZW56YS4uLiIJCUlEX0xJQ0VOU0UKICoJCSAgTUVOVUlURU0gIiZHYXJhbnppYSIJCUlEX05PX1dBUlJBTlRZCiAqLwoJCX0KCX0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkVzZWd1aSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglDT05UUk9MIAkJIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAoJQ09OVFJPTCAJCSImQ29tYW5kbzoiICwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAoJRURJVFRFWFQJCTIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCglDT05UUk9MIAkJIkNvbWUgJlNpbWJvbG8iICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkJIk9LIiAsIDEsIDE1OCwgNiwgNDcsIDE0CglQVVNIQlVUVE9OCQkiQW5udWxsYSIgLCAyLCAxNTgsIDIzLCA0NywgMTQKCVBVU0hCVVRUT04JCSImQWl1dG8iICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKSUREX1NFTEVDVF9ERVNUSU5BVElPTiBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJTZWxlY3QgZGVzdGluYXRpb24iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJQ09OVFJPTCAJCSIiLCAxMDEsICJTdGF0aWNvIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCglDT05UUk9MIAkJIiZQZXJjb3JzbzoiICwgLTEsICJTdGF0aWNvIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKCUVESVRURVhUCQkyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAoJREVGUFVTSEJVVFRPTgkJIk9LIiAsIDEsIDE1OCwgNiwgNDcsIDE0CglQVVNIQlVUVE9OCQkiQW5udWxsYSIgLCAyLCAxNTgsIDIzLCA0NywgMTQKCVBVU0hCVVRUT04JCSImTmF2aWdhIiAsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KClNUUklOR1RBQkxFCnsKCUlEU19GT05UX1NFTF9ETEdfTkFNRQkiQXBwbGljYSBsZSBpbXBvc3RhemlvbmkgZGVpIGZvbnQiCglJRFNfRk9OVF9TRUxfRVJST1IJIlNpIOggdmVyaWZpY2F0byB1biBlcnJvcmUgZHVyYW50ZSBsYSBzZWxlemlvbmUgZGVsIG51b3ZvIGZvbnQuIgp9Cg==