LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIENvcHlyaWdodCAxOTk4IEp1ZXJnZW4gU2NobWllZAogKiBDb3B5cmlnaHQgMjAwMyBGaWxpcCBOYXZhcmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19DWkVDSCwgU1VCTEFOR19ERUZBVUxUCgovKiBDemVjaCBzdHJpbmdzIGluIENQMTI1MCAqLwoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZWZWRsZSBzZWJlIiwJCUZDSURNX1NIVklFV19CSUdJQ09OCglNRU5VSVRFTSAiJklrb255IiwJCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICImU2V6bmFtIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIiZQb2Ryb2Jub3N0aSIsCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCkVORAoKLyoKIHNoZWxsdmlldyBiYWNrZ3JvdW5kIG1lbnUKKi8KTUVOVV8wMDIgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIFBPUFVQICJaJm9icmF6aXQiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZWZWRsZSBzZWJlIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiJklrb255IiwJCUZDSURNX1NIVklFV19TTUFMTElDT04KCSAgICBNRU5VSVRFTSAiJlNlem5hbSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJlBvZHJvYm5vc3RpIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBQT1BVUCAiU2X4YWRpdCAmaWtvbnkiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIlBvZGxlICZO4Xp2dSIsCTB4MzAJLyogY29sdW1uIDAgKi8KCSAgICBNRU5VSVRFTSAiUG9kbGUgJlR5cHUiLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIlBvZGxlICZWZWxpa29zdGkiLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICJQb2RsZSAmRGF0YSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAiJlJvdm5hdCBhdXRvbWF0aWNreSIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQoJICBFTkQKCSAgTUVOVUlURU0gIlphcm92bmF0IGlrb255IiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJBJmt0dWFsaXpvdmF0IiwJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJWJmxvnml0IiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIlZsb55pdCB64XN0JnVwY2UiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIiZOb3b9IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOb3bhICZzbG+ea2EiLAlGQ0lETV9TSFZJRVdfTkVXRk9MREVSCgkgICAgTUVOVUlURU0gIk5vdv0gJnrhc3R1cGNlIiwJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJlZsYXN0bm9zdGkiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIlAmcm96a291bWF0IiwJCUZDSURNX1NIVklFV19FWFBMT1JFCgkgIE1FTlVJVEVNICJPJnRldvjtdCIsCQkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJWeWombW91dCIsCQkJRkNJRE1fU0hWSUVXX0NVVAoJICBNRU5VSVRFTSAiJktvcO1yb3ZhdCIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlZ5dHZv+Gl0IHrhc3R1cGMmZSIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCgkgIE1FTlVJVEVNICJPJmRzdHJhbml0IiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZQ+GVqbWVub3ZhdCIsCQlGQ0lETV9TSFZJRVdfUkVOQU1FCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJlZsYXN0bm9zdGkiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIlByb2No4XpldC4uLiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDgwLCAxNzYsIDUwLCAxMiwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiU3Rvcm5vIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk8gYXBsaWthY2kgJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzMsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxMCwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgMzAsIDEwLCAxMzcsIDEwCiBMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKIExURVhUICJXaW5lIGplIGTtbGVtOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIlphZGVqdGUgbuF6ZXYgcHJvZ3JhbXUsIHNsb55reSwgZG9rdW1lbnR1LCBuZWJvIHpkcm9qZSB2IHPtdGkgSW50ZXJuZXQgYSBXaW5lIGplaiBwcm8gduFzIG90ZXb4ZS4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAiJk90ZXb47XQ6IiwgMTIzMDUsIDcsIDM5LCAyNCwgMTAKIENPTlRST0wgIiIsIDEyMjk4LCAiQ09NQk9CT1giLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIlN0b3JubyIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZQcm9jaOF6ZXQuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KCi8qCglzcGVjaWFsIGZvbGRlcnMKKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX0RFU0tUT1AJCSJQbG9jaGEiCglJRFNfTVlDT01QVVRFUgkJIlRlbnRvIHBv6O10YegiCn0KCi8qCgljb250ZXh0IG1lbnVzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19WSUVXX0xBUkdFCQkiJlZlZGxlIHNlYmUiCglJRFNfVklFV19TTUFMTAkJIiZJa29ueSIKCUlEU19WSUVXX0xJU1QJCSImU2V6bmFtIgoJSURTX1ZJRVdfREVUQUlMUwkiJlBvZHJvYm5vc3RpIgoJSURTX1NFTEVDVAkJIlZ5YnJhdCIKCUlEU19PUEVOCQkiT3RldvjtdCIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIk5lbHplIHZ5dHZv+Gl0IG5vdm91IHNsb55rdSBwcm90b55lIHD47XN0dXAgYnlsIG9kZXD4ZW4uIgoJSURTX0NSRUFURUZPTERFUl9DQVBUSU9OICJDaHliYSBw+GkgcG9rdXN1IHZ5dHZv+Gl0IG5vdv0gYWRyZXPh+CIKCUlEU19ERUxFVEVJVEVNX0NBUFRJT04gIlBvdHZyZGl0IG9kc3RyYW7sbu0gc291Ym9ydSIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiUG90dnJkaXQgb2RzdHJhbuxu7SBhZHJlc+H4ZSIKCUlEU19PVkVSV1JJVEVGSUxFX0NBUFRJT04gIlBvdHZyZGl0IHD4ZXBz4W7tIHNvdWJvcnUiCglJRFNfREVMRVRFSVRFTV9URVhUICJPcHJhdmR1IGNoY2V0ZSBvZHN0cmFuaXQgJyUxJz8iCglJRFNfREVMRVRFTVVMVElQTEVfVEVYVCAiT3ByYXZkdSBjaGNldGUgb2RzdHJhbml0IHTsY2h0byAlMSBwb2xvnmVrPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIlD4ZWpldGUgc2kgcPhlcHNhdCBzb3Vib3IgJyUxJz8iCn0KCi8qCWNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldwkqLwpTVFJJTkdUQUJMRQpCRUdJTgoJSURTX1NIVl9DT0xVTU4xCQkiTuF6ZXYiCglJRFNfU0hWX0NPTFVNTjIJCSJWZWxpa29zdCIKCUlEU19TSFZfQ09MVU1OMwkJIlR5cCIKCUlEU19TSFZfQ09MVU1ONAkJIlpt7G7sbm8iCglJRFNfU0hWX0NPTFVNTjUJCSJBdHJpYnV0eSIKCUlEU19TSFZfQ09MVU1ONgkJIlZlbGlrb3N0IgoJSURTX1NIVl9DT0xVTU43CQkiVm9sbukgbe1zdG8iCglJRFNfU0hWX0NPTFVNTjgJCSJKbelubyIKCUlEU19TSFZfQ09MVU1OOQkJIktvbWVudOH4IgpFTkQK