LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzLDIwMDQsMjAwNywyMDA4IEpvc+kgTWFudWVsIEZlcnJlciBPcnRpegogKiBDb3B5cmlnaHQgMjAxMCBKb3PpIFJvc3RhZ25vCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJzaHJlc2RlZi5oIgoKTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX05FVVRSQUwKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCU1FTlVJVEVNICJJY29ub3MgJmdyYW5kZXMiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIkljb25vcyAmcGVxdWXxb3MiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCglNRU5VSVRFTSAiJkxpc3RhIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIiZEZXRhbGxlcyIsCQlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwpFTkQKCi8qCiBzaGVsbHZpZXcgYmFja2dyb3VuZCBtZW51CiovCk1FTlVfMDAyIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBQT1BVUCAiJlZlciIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiSWNvbm9zICZncmFuZGVzIiwgICAgIEZDSURNX1NIVklFV19CSUdJQ09OCgkgICAgTUVOVUlURU0gIkljb25vcyAmcGVxdWXxb3MiLCAgICBGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0YSIsICAgICAgICAgICAgICBGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJkRldGFsbGVzIiwgICAgICAgICAgIEZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk9yZGVuYXIgJmljb25vcyIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiUG9yICZub21icmUiLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIlBvciAmdGlwbyIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiUG9yIHQmYW1h8W8iLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICJQb3IgJmZlY2hhIiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICImT3JkZW5hciBhdXRvbeF0aWNhbWVudGUiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICJBbGluZWFyIGljb25vcyIsCQlGQ0lETV9TSFZJRVdfU05BUFRPR1JJRAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkFjdHVhbGl6YXIiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJQZWdhciIsCQkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiUGVnYXIgYWNjZXNvIGRpcmVjdG8iLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk51ZXZvIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOdWV2YSAmY2FycGV0YSIsCQlGQ0lETV9TSFZJRVdfTkVXRk9MREVSCgkgICAgTUVOVUlURU0gIk51ZXZvICZhY2Nlc28gZGlyZWN0byIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlByb3BpZWRhZGVzIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICImU2VsZWNjaW9uYXIiCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSAiRSZ4cGxvcmFyIiwJCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQoJICBNRU5VSVRFTSAiJkFicmlyIiwJCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkMmb3J0YXIiLAkJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZDb3BpYXIiLAkJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiQyZyZWFyIGFjY2VzbyBkaXJlY3RvIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZFbGltaW5hciIsCQkJRkNJRE1fU0hWSUVXX0RFTEVURQoJICBNRU5VSVRFTSAiUmUmbm9tYnJhciIsCQlGQ0lETV9TSFZJRVdfUkVOQU1FCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJlByb3BpZWRhZGVzIiwJCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpNRU5VX0NQQU5FTCBNRU5VCkJFR0lOCiAgICBQT1BVUCAiJkFyY2hpdm8iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTJmFsaXIiLCBJRE1fQ1BBTkVMX0VYSVQKICAgIEVORAoKICAgIFBPUFVQICImVmVyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiSWNvbm9zICZncmFuZGVzIiwgRkNJRE1fU0hWSUVXX0JJR0lDT04KICAgICAgICBNRU5VSVRFTSAiSWNvbm9zICZwZXF1ZfFvcyIsIEZDSURNX1NIVklFV19TTUFMTElDT04KICAgICAgICBNRU5VSVRFTSAiJkxpc3RhIiwgRkNJRE1fU0hWSUVXX0xJU1RWSUVXCiAgICAgICAgTUVOVUlURU0gIiZEZXRhbGxlcyIsIEZDSURNX1NIVklFV19SRVBPUlRWSUVXCiAgICBFTkQKCiAgICBQT1BVUCAiJkF5dWRhIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkFjZXJjYSBkZSBQYW5lbCBkZSBDb250cm9sLi4uIiwgSURNX0NQQU5FTF9BQk9VVAogICAgRU5ECkVORAoKU0hCUlNGT1JGT0xERVJfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMTg4LCAxOTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBEU18zRExPT0sKQ0FQVElPTiAiRXhwbG9yYXIgY2FycGV0YSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJDYW5jZWxhciIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNITkVXQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxOCwgMTk2ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1NJWkVCT1ggfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJFeHBsb3JhciBjYXJwZXRhIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIExURVhUICIiLCBJRERfVElUTEUsIDEwLCA4LCAxOTgsIDI0CiBMVEVYVCAiIiwgSUREX1NUQVRVUywgMTAsIDI1LCAxOTgsIDEyCiBMVEVYVCAiQ2FycGV0YToiLCBJRERfRk9MREVSLCAxMCwgMTU2LCA0MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogICAgICAgVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAogICAgICAgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKICAgICAgIDEyLCAzOCwgMTk0LCAxMDUKIEVESVRURVhUIElERF9GT0xERVJURVhULCA0NiwgMTUwLCAxNjAsIDE0LCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZIYWNlciBudWV2YSBjYXJwZXRhIiwgSUREX01BS0VORVdGT0xERVIsIDEyLCAxNzQsIDcwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgSURPSywgMTAyLCAxNzQsIDUwLCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiQ2FuY2VsYXIiLCBJRENBTkNFTCwgMTU2LCAxNzQsIDUwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCn0KClNIRUxMX1lFU1RPQUxMX01TR0JPWCBESUFMT0cgMjAwLCAxMDAsIDI4MCwgOTAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk1lbnNhamUiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgREVGUFVTSEJVVFRPTiAiJlPtIiwgSURZRVMsIDM0LCA2OSwgNTMsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gIlPtIGEgJnRvZG8iLCBJRERfWUVTVE9BTEwsIDkyLCA2OSwgNjUsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gIiZObyIsIElETk8sIDE2MiwgNjksIDUzLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICImQ2FuY2VsYXIiLCBJRENBTkNFTCwgMjIwLCA2OSwgNTMsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIElDT04gIiIsIElERF9JQ09OLCAxMCwgMTAsIDE2LCAxNgogICAgTFRFWFQgIiIsIElERF9NRVNTQUdFLCA0MCwgMTAsIDIzOCwgNTIsIDAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjIwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkFjZXJjYSBkZSAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsIElET0ssIDE1MywgMTMzLCA2MCwgMTIsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZMaWNlbmNpYSBkZSBXaW5lLi4uIiwgSURDX0FCT1VUX0xJQ0VOU0UsIDE1MywgMTEzLCA2MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggSURDX0FCT1VUX0xJU1RCT1gsIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgc3RjMSwgMTAsIDEwLCAzMCwgMzAKIExURVhUICIiLCBJRENfQUJPVVRfU1RBVElDX1RFWFQxLCA0MiwgMTAsIDE3MCwgMTAKIExURVhUICIiLCBJRENfQUJPVVRfU1RBVElDX1RFWFQyLCA0MiwgMjIsIDE3MCwgMTAKIExURVhUICJFamVjdXThbmRvc2UgZW4gJXMiLCBJRENfQUJPVVRfU1RBVElDX1RFWFQzLCA0MiwgMzQsIDE3MCwgMTAKIExURVhUICJXaW5lIGxlIGhhIHNpZG8gcHJvcG9yY2lvbmFkbyBwb3I6IiwgSURDX0FCT1VUX1dJTkVfVEVYVCwgOCwgNTQsIDIwNCwgMTAKfQoKU0hFTExfUlVOX0RMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyMjcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogSUNPTiAiIiwgMTIyOTcsIDcsIDExLCAxOCwgMjAsIFdTX1ZJU0lCTEUKIExURVhUICJJbnRyb2R1emNhIGVsIG5vbWJyZSBkZSB1biBwcm9ncmFtYSwgY2FycGV0YSwgZG9jdW1lbnRvIG8gcmVjdXJzbyBkZSBJbnRlcm5ldDsgeSBXaW5lIGxvIGFicmly4SBwYXJhIHVzdGVkLiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImQWJyaXI6IiwgMTIzMDUsIDcsIDM5LCAyNCwgMTAKIENPTlRST0wgIiIsIDEyMjk4LCAiQ09NQk9CT1giLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiQ2FuY2VsYXIiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICImRXhhbWluYXIuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFCnsKICAgICAgICAvKiBjb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcgKi8KCUlEU19TSFZfQ09MVU1OMSAgICAgICAgICJBcmNoaXZvIgoJSURTX1NIVl9DT0xVTU4yICAgICAgICAgIlRhbWHxbyIKCUlEU19TSFZfQ09MVU1OMyAgICAgICAgICJUaXBvIgoJSURTX1NIVl9DT0xVTU40ICAgICAgICAgIk1vZGlmaWNhZG8iCglJRFNfU0hWX0NPTFVNTjUgICAgICAgICAiQXRyaWJ1dG9zIgoJSURTX1NIVl9DT0xVTU42ICAgICAgICAgIlRhbWHxbyIKCUlEU19TSFZfQ09MVU1ONyAgICAgICAgICJUYW1h8W8gZGlzcG9uaWJsZSIKCUlEU19TSFZfQ09MVU1OOCAgICAgICAgICJOb21icmUiCglJRFNfU0hWX0NPTFVNTjkgICAgICAgICAiQ29tZW50YXJpb3MiCglJRFNfU0hWX0NPTFVNTjEwICAgICAgICAiUHJvcGlldGFybyIKCUlEU19TSFZfQ09MVU1OMTEgICAgICAgICJHcnVwbyIKCUlEU19TSFZfQ09MVU1OX0RFTEZST00gICJMdWdhciBvcmlnaW5hbCIKCUlEU19TSFZfQ09MVU1OX0RFTERBVEUgICJGZWNoYSBkZSBib3JyYWRvIgoJSURTX1NIVl9DT0xfRE9DUyAgICAgICAgIkRvY3VtZW50b3MiCglJRFNfU0hWX0NPTF9TVEFUVVMgICAgICAiRXN0YWRvIgoJSURTX1NIVl9DT0xfTE9DQVRJT04gICAgIlViaWNhY2nzbiIKCUlEU19TSFZfQ09MX01PREVMICAgICAgICJNb2RlbG8iCgogICAgICAgIC8qIHNwZWNpYWwgZm9sZGVycyAqLwoJSURTX0RFU0tUT1AJCSJFc2NyaXRvcmlvIgoJSURTX01ZQ09NUFVURVIJCSJNaSBQQyIKICAgICAgICBJRFNfUkVDWUNMRUJJTl9GT0xERVJfTkFNRSAiUGFwZWxlcmEgZGUgcmVjaWNsYWplIgoJSURTX0NPTlRST0xQQU5FTAkiUGFuZWwgZGUgQ29udHJvbCIKCiAgICAgICAgLyogY29udGV4dCBtZW51cyAqLwoJSURTX1ZJRVdfTEFSR0UJCSJJY29ub3MgJmdyYW5kZXMiCglJRFNfVklFV19TTUFMTAkJIkljb25vcyAmcGVxdWXxb3MiCglJRFNfVklFV19MSVNUCQkiJkxpc3RhIgoJSURTX1ZJRVdfREVUQUlMUwkiJkRldGFsbGVzIgoJSURTX1NFTEVDVAkJIlNlbGVjY2lvbmFyIgoJSURTX09QRU4JCSJBYnJpciIKCglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAiTm8gc2UgcHVlZGUgY3JlYXIgbnVldmEgY2FycGV0YTogUGVybWlzbyBkZW5lZ2Fkby4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIkVycm9yIGR1cmFudGUgbGEgY3JlYWNp824gZGUgdW5hIG51ZXZhIGNhcnBldGEiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICJDb25maXJtYXIgZWxpbWluYWNp824gZGUgYXJjaGl2byIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiQ29uZmlybWFyIGVsaW1pbmFjafNuIGRlIGNhcnBldGEiCglJRFNfREVMRVRFSVRFTV9URVhUICK/U2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciAnJTEnPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICK/U2VndXJvIHF1ZSBkZXNlYSBlbGltaW5hciBlc3RvcyAlMSBlbGVtZW50b3M/IgoJSURTX0RFTEVURVNFTEVDVEVEX1RFWFQgIr9TZWd1cm8gcXVlIGRlc2VhIGVsaW1pbmFyIGVsIChsb3MpIGVsZW1lbnRvKHMpIHNlbGVjY2lvbmFkbyhzKT8iCglJRFNfVFJBU0hJVEVNX1RFWFQgIr9TZWd1cm8gcXVlIGRlc2VhIGVudmlhciAnJTEnIGEgbGEgcGFwZWxlcmEgZGUgcmVjaWNsYWplPyIKCUlEU19UUkFTSEZPTERFUl9URVhUICK/U2VndXJvIHF1ZSBkZXNlYSBlbnZpYXIgJyUxJyB5IHRvZG8gc3UgY29udGVuaWRvIGEgbGEgcGFwZWxlcmEgZGUgcmVjaWNsYWplPyIKCUlEU19UUkFTSE1VTFRJUExFX1RFWFQgIr9TZWd1cm8gcXVlIGRlc2VhIGVudmlhciBlc3RvcyAlMSBlbGVtZW50b3MgYSBsYSBwYXBlbGVyYSBkZSByZWNpY2xhamU/IgoJSURTX0NBTlRUUkFTSF9URVhUICJFbCBlbGVtZW50byAnJTEnIG5vIHB1ZWRlIGVudmlhcnNlIGEgbGEgcGFwZWxlcmEgZGUgcmVjaWNsYWplLiC/RGVzZWEgZWxpbWluYXJsbyBlbiBzdSBsdWdhcj8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICJFc3RhIGNhcnBldGEgeWEgY29udGllbmUgdW4gYXJjaGl2byBsbGFtYWRvICclMScuXG5cbr9EZXNlYSByZWVtcGxhemFybG8/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiQ29uZmlybWFyIHNvYnJlZXNjcml0dXJhIGRlIGFyY2hpdm8iCglJRFNfT1ZFUldSSVRFRk9MREVSX1RFWFQgIkVzdGEgY2FycGV0YSB5YSBjb250aWVuZSB1bmEgY2FycGV0YSBsbGFtYWRhICclMScuXG5cbiJcCgkgICAgIlNpIGxvcyBhcmNoaXZvcyBkZSBsYSBjYXJwZXRhIGRlIGRlc3Rpbm8gdGllbmVuIGxvcyBtaXNtb3Mgbm9tYnJlcyBxdWUgbG9zXG4iXAoJICAgICJkZSBsYSBjYXJwZXRhIHNlbGVjY2lvbmFkYSwg6XN0b3Mgc2Vy4W4gcmVlbXBsYXphZG9zLiC/VG9kYXbtYSBkZXNlYSBtb3ZlclxuIlwKCSAgICAibyBjb3BpYXIgbGEgY2FycGV0YT8iCgogICAgICAgIC8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KICAgICAgICBJRFNfUkVTVEFSVF9USVRMRQkiUmVpbmljaWFyIgogICAgICAgIElEU19SRVNUQVJUX1BST01QVAkiv0Rlc2VhIHNpbXVsYXIgdW4gcmVpbmljaW8gZGUgV2luZG93cz8iCiAgICAgICAgSURTX1NIVVRET1dOX1RJVExFCSJBcGFnYXIiCiAgICAgICAgSURTX1NIVVRET1dOX1BST01QVAkiv0Rlc2VhIHRlcm1pbmFyIHN1IHNlc2nzbiBkZSBXaW5lPyIKCiAgICAgICAgLyogUnVuIEZpbGUgZGlhbG9nICovCiAgICAgICAgSURTX1JVTkRMR19FUlJPUiAgICAgICAgICAgIk5vIHNlIHB1ZWRlIG1vc3RyYXIgZWwgY3VhZHJvIGRlIGRp4WxvZ28gZWplY3V0YXIgYXJjaGl2byAoZXJyb3IgaW50ZXJubykiCiAgICAgICAgSURTX1JVTkRMR19CUk9XU0VfRVJST1IgICAgIk5vIHNlIHB1ZWRlIG1vc3RyYXIgZWwgY3VhZHJvIGRlIGRp4WxvZ28gRXhhbWluYXIgKGVycm9yIGludGVybm8pIgogICAgICAgIElEU19SVU5ETEdfQlJPV1NFX0NBUFRJT04gICJFeGFtaW5hciIKICAgICAgICBJRFNfUlVORExHX0JST1dTRV9GSUxURVIgICAiQXJjaGl2b3MgZWplY3V0YWJsZXNcMCouZXhlXDBUb2RvcyBsb3MgYXJjaGl2b3NcMCouKlwwXDAiCgogICAgICAgIC8qIHNoZWxsIGZvbGRlciBwYXRoIGRlZmF1bHQgdmFsdWVzICovCglJRFNfUFJPR1JBTVMgICAgICAgICAgICAgICAgIk1lbvogSW5pY2lvXFxQcm9ncmFtYXMiCglJRFNfUEVSU09OQUwgICAgICAgICAgICAgICAgIk1pcyBkb2N1bWVudG9zIgoJSURTX0ZBVk9SSVRFUyAgICAgICAgICAgICAgICJGYXZvcml0b3MiCglJRFNfU1RBUlRVUCAgICAgICAgICAgICAgICAgIk1lbvogSW5pY2lvXFxQcm9ncmFtYXNcXEluaWNpbyIKCUlEU19SRUNFTlQgICAgICAgICAgICAgICAgICAiUmVjaWVudGVzIgoJSURTX1NFTkRUTyAgICAgICAgICAgICAgICAgICJFbnZpYXIgYSIKCUlEU19TVEFSVE1FTlUgICAgICAgICAgICAgICAiTWVu+iBJbmljaW8iCglJRFNfTVlNVVNJQyAgICAgICAgICAgICAgICAgIk1pIG36c2ljYSIKCUlEU19NWVZJREVPICAgICAgICAgICAgICAgICAiTWlzIHbtZGVvcyIKCUlEU19ERVNLVE9QRElSRUNUT1JZICAgICAgICAiRXNjcml0b3JpbyIKCUlEU19ORVRIT09EICAgICAgICAgICAgICAgICAiRW50b3JubyBkZSByZWQiCglJRFNfVEVNUExBVEVTICAgICAgICAgICAgICAgIlBsYW50aWxsYXMiCglJRFNfQVBQREFUQSAgICAgICAgICAgICAgICAgIkRhdG9zIGRlIHByb2dyYW1hIgoJSURTX1BSSU5USE9PRCAgICAgICAgICAgICAgICJWZWNpbmRhcmlvIGRlIGltcHJlc2nzbiIKCUlEU19MT0NBTF9BUFBEQVRBICAgICAgICAgICAiQ29uZmlndXJhY2nzbiBsb2NhbFxcRGF0b3MgZGUgcHJvZ3JhbWEiCglJRFNfSU5URVJORVRfQ0FDSEUgICAgICAgICAgIkNvbmZpZ3VyYWNp824gbG9jYWxcXEFyY2hpdm9zIHRlbXBvcmFsZXMgZGUgSW50ZXJuZXQiCglJRFNfQ09PS0lFUyAgICAgICAgICAgICAgICAgIkNvb2tpZXMiCglJRFNfSElTVE9SWSAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyYWNp824gbG9jYWxcXEhpc3RvcmlhbCIKCUlEU19QUk9HUkFNX0ZJTEVTICAgICAgICAgICAiQXJjaGl2b3MgZGUgcHJvZ3JhbWEiCglJRFNfTVlQSUNUVVJFUyAgICAgICAgICAgICAgIk1pcyBpbeFnZW5lcyIKCUlEU19QUk9HUkFNX0ZJTEVTX0NPTU1PTiAgICAiQXJjaGl2b3MgZGUgcHJvZ3JhbWFcXEFyY2hpdm9zIGNvbXVuZXMiCglJRFNfQ09NTU9OX0RPQ1VNRU5UUyAgICAgICAgIkRvY3VtZW50b3MiCglJRFNfQURNSU5UT09MUyAgICAgICAgICAgICAgIk1lbvogSW5pY2lvXFxQcm9ncmFtYXNcXEFjY2Vzb3Jpb3NcXEhlcnJhbWllbnRhcyBkZWwgc2lzdGVtYSIKCUlEU19DT01NT05fTVVTSUMgICAgICAgICAgICAiRG9jdW1lbnRvc1xcTWkgbfpzaWNhIgoJSURTX0NPTU1PTl9QSUNUVVJFUyAgICAgICAgICJEb2N1bWVudG9zXFxNaXMgaW3hZ2VuZXMiCglJRFNfQ09NTU9OX1ZJREVPICAgICAgICAgICAgIkRvY3VtZW50b3NcXE1pcyB27WRlb3MiCglJRFNfQ0RCVVJOX0FSRUEgICAgICAgICAgICAgIkNvbmZpZ3VyYWNp824gbG9jYWxcXERhdG9zIGRlIHByb2dyYW1hXFxNaWNyb3NvZnRcXENEIEJ1cm5pbmciCgoJSURTX05FV0ZPTERFUgkJIk51ZXZhIGNhcnBldGEiCgoJSURTX0NQQU5FTF9USVRMRSAgICAgICAgICAgICJQYW5lbCBkZSBDb250cm9sIGRlIFdpbmUiCglJRFNfQ1BBTkVMX05BTUUgICAgICAgICAgICAgIk5vbWJyZSIKCUlEU19DUEFORUxfREVTQ1JJUFRJT04gICAgICAiRGVzY3JpcGNp824iCgogICAgICAgIElEU19TSExFWEVDX05PQVNTT0MgICAgICAgICAiTm8gaGF5IHVuIHByb2dyYW1hIGRlIFdpbmRvd3MgY29uZmlndXJhZG8gcGFyYSBhYnJpciBlc3RlIHRpcG8gZGUgYXJjaGl2by4iCn0KClNUUklOR1RBQkxFCnsKSURTX0xJQ0VOU0VfQ0FQVElPTiwgICAgICAgICAgICAiTGljZW5jaWEgZGUgV2luZSIKSURTX0xJQ0VOU0UsCiJXaW5lIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBcCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgXApMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgXAp2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuXApXaW5lIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBcCkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cblwKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBcCkxpY2Vuc2UgYWxvbmcgd2l0aCBXaW5lOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIFwKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4iCn0K