LyoKICogQ29weXJpZ2h0IDIwMDUgQWxleGFuZGVyIE4uIFP4cm5lcyA8YWxleEB0aGVoYW5kb2ZhZ29ueS5jb20+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCU1FTlVJVEVNICImU3RvcmUgaWtvbmVyIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICImU23lIGlrb25lciIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICImTGlzdGUiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCglNRU5VSVRFTSAiJkRldGFsamVyIiwJCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCkVORAoKLyoKIHNoZWxsdmlldyBiYWNrZ3JvdW5kIG1lbnUKKi8KTUVOVV8wMDIgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIFBPUFVQICImVmlzIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICImU3RvcmUgaWtvbmVyIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiUyZt5SBpa29uZXIiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0ZSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJkRldGFsamVyIiwJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBQT1BVUCAiT3JkbmUgJmlrb25lciIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiRXR0ZXIgJm5hdm4iLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIkV0dGVyICZ0eXBlIiwJMHgzMgkvKiBjb2x1bW4gMiAqLwoJICAgIE1FTlVJVEVNICJFdHRlciAmc3T4cnJlbHNlIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiRXR0ZXIgJmRhdG8iLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIk9yZG5lICZhdXRvbWF0aXNrIiwJRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiU3RpbGwgb3BwIGlrb25lciIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiT3BwZGF0ZXIiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJMaW0gaW5uIiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIkxpbSBpbm4gc29tIHNuYXJ2ZWkiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk55IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOeSAmbWFwcGUiLAlGQ0lETV9TSFZJRVdfTkVXRk9MREVSCgkgICAgTUVOVUlURU0gIk55ICZzbmFydmVpIiwJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiRWdlbnNrYXBlciIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBNRU5VSVRFTSAiJlV0Zm9yc2siLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIibFcG5lIiwJCUZDSURNX1NIVklFV19PUEVOCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiS2xpcHAgJnV0IiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3BpZXIiLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImT3BwcmV0dCBzbmFydmVpIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZTbGV0dCIsCQlGQ0lETV9TSFZJRVdfREVMRVRFCgkgIE1FTlVJVEVNICImR2kgbnl0dCBuYXZuIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJFZ2Vuc2thJnBlciIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJCbGEgZXR0ZXIgbWFwcGUiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkF2YnJ5dCIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJPbSAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAxNTMsIDEzMywgNTAsIDEyLCBXU19UQUJTVE9QCiBMSVNUQk9YIDk5LCA4LCA2NSwgMTM3LCA4MiwgTEJTX05PVElGWSB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKIElDT04gIiIsIDEwODgsIDEwLCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCAzMCwgMTAsIDEzNywgMTAKIExURVhUICIiLCAxMDEsIDMwLCAyMiwgMTM3LCAxMAogTFRFWFQgIldpbmUgZXIgbGFnZXQgYXYiLCA5OCwgOCwgNTUsIDEzNywgMTAKfQoKU0hFTExfUlVOX0RMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyMjcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogSUNPTiAiIiwgMTIyOTcsIDcsIDExLCAxOCwgMjAsIFdTX1ZJU0lCTEUKIExURVhUICJTa3JpdiBpbm4gbmF2bmV0IHDlIHByb2dyYW1tZXQsIG1hcHBlbiwgZG9rdW1lbnRldCBldHRlciBJbnRlcm5ldHQtcmVzc3Vyc2VuIGR1IPhuc2tlciDlIOVwbmUuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIibFcG5lOiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJBdmJyeXQiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICImQmxhIC4gLiAuIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAgICAgLyogY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3ICovCglJRFNfU0hWX0NPTFVNTjEJCSJGaWwiCglJRFNfU0hWX0NPTFVNTjIJCSJTdPhycmVsc2UiCglJRFNfU0hWX0NPTFVNTjMJCSJUeXBlIgoJSURTX1NIVl9DT0xVTU40CQkiRW5kcmV0IgoJSURTX1NIVl9DT0xVTU41CQkiRWdlbnNrYXBlciIKCUlEU19TSFZfQ09MVU1ONgkJIlN0+HJyZWxzZSIKCUlEU19TSFZfQ09MVU1ONwkJIkxlZGlnIHBsYXNzIgoJSURTX1NIVl9DT0xVTU44CQkiTmF2biIKCUlEU19TSFZfQ09MVU1OOQkJIktvbW1lbnRhcmVyIgoJSURTX1NIVl9DT0xVTU4xMAkiRWllciIKCUlEU19TSFZfQ09MVU1OMTEJIkdydXBwZSIKCiAgICAgICAgLyogc3BlY2lhbCBmb2xkZXJzICovCglJRFNfREVTS1RPUAkJIlNrcml2ZWJvcmQiCglJRFNfTVlDT01QVVRFUgkJIk1pbiBkYXRhbWFza2luIgoKICAgICAgICAvKiBjb250ZXh0IG1lbnVzICovCglJRFNfVklFV19MQVJHRQkJIiZTdG9yZSBpa29uZXIiCglJRFNfVklFV19TTUFMTAkJIlMmbeUgaWtvbmVyIgoJSURTX1ZJRVdfTElTVAkJIiZMaXN0ZSIKCUlEU19WSUVXX0RFVEFJTFMJIiZEZXRhbGplciIKCUlEU19TRUxFQ1QJCSJWZWxnIgoJSURTX09QRU4JCSLFcG5lIgoKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICJLdW5uZSBpa2tlIG9wcHJldHRlIG55IG1hcHBlOiB0aWxnYW5nIG5la3RldC4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIktsYXJ0ZSBpa2tlIG9wcHJldHRlIG55IG1hcHBlIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiQmVrcmVmdCBmaWxzbGV0dGluZyIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiQmVrcmVmdCBzbGV0dGluZyBhdiBtYXBwZSIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIlZpcmtlbGlnIHNsZXR0ZSCrJTG7PyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICJWaXJrZWxpZyBzbGV0dGUgZGlzc2UgJTEgZWxlbWVudGVuZT8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICJPdmVyc2tyaXZlIGZpbGVuIKslMbs/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiQmVrcmVmdCBvdmVyc2tyaXZpbmcgYXYgZmlsIgoKICAgICAgICAvKiBtZXNzYWdlIGJveCBzdHJpbmdzICovCiAgICAgICAgSURTX1JFU1RBUlRfVElUTEUgICAgICAgIlN0YXJ0ZSBw5SBueXR0IgogICAgICAgIElEU19SRVNUQVJUX1BST01QVCAgICAgICJWaWwgZHUgc2ltdWxlcmUgZW4gb21zdGFydCBhdiBXaW5kb3dzPyIKICAgICAgICBJRFNfU0hVVERPV05fVElUTEUgICAgICAiQXZzbHV0dCIKICAgICAgICBJRFNfU0hVVERPV05fUFJPTVBUICAgICAiVmlsIGR1IGF2c2x1dHRlIFdpbmUt+Gt0ZW4/IgoKICAgICAgICAvKiBzaGVsbCBmb2xkZXIgcGF0aCBkZWZhdWx0IHZhbHVlcyAqLwoJSURTX1BST0dSQU1TICAgICAgICAgICAgICAgICJTdGFydC1tZW55XFxQcm9ncmFtbWVyIgoJSURTX1BFUlNPTkFMICAgICAgICAgICAgICAgICJNaW5lIGRva3VtZW50ZXIiCglJRFNfRkFWT1JJVEVTICAgICAgICAgICAgICAgIkZhdm9yaXR0ZXIiCglJRFNfU1RBUlRVUCAgICAgICAgICAgICAgICAgIlN0YXJ0LW1lbnlcXFByb2dyYW1tZXJcXE9wcHN0YXJ0IgoJSURTX1JFQ0VOVCAgICAgICAgICAgICAgICAgICJTaXN0ZSIKCUlEU19TRU5EVE8gICAgICAgICAgICAgICAgICAiU2VuZFRvIgoJSURTX1NUQVJUTUVOVSAgICAgICAgICAgICAgICJTdGFydC1tZW55IgoJSURTX01ZTVVTSUMgICAgICAgICAgICAgICAgICJNaW4gbXVzaWtrIgoJSURTX01ZVklERU8gICAgICAgICAgICAgICAgICJNaW5lIHZpZGVva2xpcHAiCglJRFNfREVTS1RPUERJUkVDVE9SWSAgICAgICAgIlNrcml2ZWJvcmQiCglJRFNfTkVUSE9PRCAgICAgICAgICAgICAgICAgIk5ldEhvb2QiCglJRFNfVEVNUExBVEVTICAgICAgICAgICAgICAgIk1hbGVyIgoJSURTX0FQUERBVEEgICAgICAgICAgICAgICAgICJQcm9ncmFtZGF0YSIKCUlEU19QUklOVEhPT0QgICAgICAgICAgICAgICAiU2tyaXZlcmUiCglJRFNfTE9DQUxfQVBQREFUQSAgICAgICAgICAgIkxva2FsZSBpbm5zdGlsbGluZ2VyXFxQcm9ncmFtZGF0YSIKCUlEU19JTlRFUk5FVF9DQUNIRSAgICAgICAgICAiTG9rYWxlIGlubnN0aWxsaW5nZXJcXFRlbXBvcmFyeSBJbnRlcm5ldCBGaWxlcyIKCUlEU19DT09LSUVTICAgICAgICAgICAgICAgICAiQ29va2llcyIKCUlEU19ISVNUT1JZICAgICAgICAgICAgICAgICAiTG9rYWxlIGlubnN0aWxsaW5nZXJcXExvZ2ciCglJRFNfUFJPR1JBTV9GSUxFUyAgICAgICAgICAgIlByb2dyYW1maWxlciIKCUlEU19NWVBJQ1RVUkVTICAgICAgICAgICAgICAiTWluZSBiaWxkZXIiCglJRFNfUFJPR1JBTV9GSUxFU19DT01NT04gICAgIlByb2dyYW1maWxlclxcRmVsbGVzZmlsZXIiCglJRFNfQ09NTU9OX0RPQ1VNRU5UUyAgICAgICAgIkRva3VtZW50ZXIiCglJRFNfQURNSU5UT09MUyAgICAgICAgICAgICAgIlN0YXJ0LW1lbnlcXFByb2dyYW1tZXJcXEFkbWluaXN0cmF0aXZlIHZlcmt0+HkiCglJRFNfQ09NTU9OX01VU0lDICAgICAgICAgICAgIkRva3VtZW50ZXJcXE1pbiBtdXNpa2siCglJRFNfQ09NTU9OX1BJQ1RVUkVTICAgICAgICAgIkRva3VtZW50ZXJcXE1pbmUgYmlsZGVyIgoJSURTX0NPTU1PTl9WSURFTyAgICAgICAgICAgICJEb2t1bWVudGVyXFxNaW5lIHZpZGVva2xpcHAiCglJRFNfQ0RCVVJOX0FSRUEgICAgICAgICAgICAgIkxva2FsZSBpbm5zdGlsbGluZ2VyXFxQcm9ncmFtZGF0YVxcTWljcm9zb2Z0XFxDRCBCdXJuaW5nIgp9Cg==