LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA2IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgpNRU5VSVRFTSAixasgvsbAzMTcKCZnKSIsCUZDSURNX1NIVklFV19CSUdJQ09OCk1FTlVJVEVNICLA28C6IL7GwMzE3CgmbSkiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCk1FTlVJVEVNICK48bfPKCZMKSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKTUVOVUlURU0gIsDavLzI9ygmRCkiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgpzaGVsbHZpZXcgYmFja2dyb3VuZCBtZW51CiovCk1FTlVfMDAyIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KUE9QVVAgIiIKQkVHSU4KUE9QVVAgIrq4seIoJlYpIgpCRUdJTgpNRU5VSVRFTSAixasgvsbAzMTcKCZnKSIsCUZDSURNX1NIVklFV19CSUdJQ09OCk1FTlVJVEVNICLA28C6IL7GwMzE3CgmbSkiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCk1FTlVJVEVNICK48bfPKCZMKSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKTUVOVUlURU0gIsDavLzI9ygmRCkiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwpFTkQKTUVOVUlURU0gU0VQQVJBVE9SClBPUFVQICK+xsDMxNwgwaS3xCgmSSkiCkJFR0lOCk1FTlVJVEVNICLAzLinwLi3zigmTikiLAkweDMwCS8qIGNvbHVtbiAwICovCk1FTlVJVEVNICLH/L3EwLi3zigmVCkiLAkweDMyCS8qIGNvbHVtbiAyICovCk1FTlVJVEVNICLFqbHit84oJlMpIiwJMHgzMQkvKiAuLi4gKi8KTUVOVUlURU0gIrOvwqW3zigmRCkiLAkweDMzCk1FTlVJVEVNIFNFUEFSQVRPUgpNRU5VSVRFTSAiwNq1vyDBpLfEKCZBKSIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQpFTkQKTUVOVUlURU0gIr7GwMzE3CDBpLfEIiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKTUVOVUlURU0gU0VQQVJBVE9SCk1FTlVJVEVNICK79bfOILDtxKciLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKTUVOVUlURU0gU0VQQVJBVE9SCk1FTlVJVEVNICK62b+ps9ax4iIsCQlGQ0lETV9TSFZJRVdfSU5TRVJUCk1FTlVJVEVNICK4tcWpt84gutm/qbPWseIiLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwpNRU5VSVRFTSBTRVBBUkFUT1IKUE9QVVAgIrv1IMDbvvciCkJFR0lOCk1FTlVJVEVNICK79SDG+rT1KCZGKSIsCUZDSURNX1NIVklFV19ORVdGT0xERVIKTUVOVUlURU0gIrv1ILi1xakoJkwpIiwJRkNJRE1fU0hWSUVXX05FV0xJTksKTUVOVUlURU0gU0VQQVJBVE9SCkVORApNRU5VSVRFTSBTRVBBUkFUT1IKTUVOVUlURU0gIrzTvLoiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwpFTkQKRU5ECgovKgpzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgpQT1BVUCAiIgpCRUdJTgpNRU5VSVRFTSAixb279igmeCkiLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKTUVOVUlURU0gIr+tseIoJk8pIiwJCUZDSURNX1NIVklFV19PUEVOCk1FTlVJVEVNIFNFUEFSQVRPUgpNRU5VSVRFTSAiwN+287O7seIoJnUpIiwJCUZDSURNX1NIVklFV19DVVQKTUVOVUlURU0gIrq5u+coJkMpIiwJCUZDSURNX1NIVklFV19DT1BZCk1FTlVJVEVNIFNFUEFSQVRPUgpNRU5VSVRFTSAiuLXFqSC4uLXpseIoJkwpIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKTUVOVUlURU0gIsH2v+yx4igmRCkiLAkJRkNJRE1fU0hWSUVXX0RFTEVURQpNRU5VSVRFTSAiwMy4pyC52bLZseIoJlIpIiwJCUZDSURNX1NIVklFV19SRU5BTUUKTUVOVUlURU0gU0VQQVJBVE9SCk1FTlVJVEVNICK807y6KCZQKSIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCkVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIsb6tPUgxb279iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CkRFRlBVU0hCVVRUT04gIsiuwM4iLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAiw+u80iIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUApMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCkxURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgpDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfApXU19CT1JERVIgfCBXU19UQUJTVE9QLAo0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiVzIMGkurgiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKREVGUFVTSEJVVFRPTiAiyK7AziIsIElET0ssIDE1MywgMTMzLCA1MCwgMTIsIFdTX1RBQlNUT1AKTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCklDT04gIiIsIDEwODgsIDEwLCAxMCwgMTQsIDE2CkxURVhUICIiLCAxMDAsIDMwLCAxMCwgMTM3LCAxMApMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKTFRFWFQgIldpbmXAuiC0573FwLsgwKfH2CDBprD4tce++r3AtM+02S46IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKSUNPTiAiIiwgMTIyOTcsIDcsIDExLCAxOCwgMjAsIFdTX1ZJU0lCTEUKTFRFWFQgIseusde4sizG+rT1LLmuvK2zqiDAzsXNs90gwNq/+Cwgsde4rrDtIFdpbmXAzCC/rSDAzLinwLsgwPu+7sHWvLy/5C4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CkxURVhUICK/rbHiKCZPKToiLCAxMjMwNSwgNywgMzksIDI0LCAxMApDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCkRFRlBVU0hCVVRUT04gIsiuwM4iLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICLD67zSIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICLDo7HiKCZCKS4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewovKiBjb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcgKi8KSURTX1NIVl9DT0xVTU4xCQkixsTAzyIKSURTX1NIVl9DT0xVTU4yCQkixamx4iIKSURTX1NIVl9DT0xVTU4zCQkix/y9xCIKSURTX1NIVl9DT0xVTU40CQkivPbBpLOvwqUiCklEU19TSFZfQ09MVU1ONQkJIrzTvLoiCklEU19TSFZfQ09MVU1ONgkJIsWpseIiCklEU19TSFZfQ09MVU1ONwkJIrChtMnH0SDFqbHiIgpJRFNfU0hWX0NPTFVNTjgJCSLAzLinIgpJRFNfU0hWX0NPTFVNTjkJCSLB1ryuIgpJRFNfU0hWX0NPTFVNTjEwCSK80sCvwNoiCklEU19TSFZfQ09MVU1OMTEJIrHXt+wiCgovKiBzcGVjaWFsIGZvbGRlcnMgKi8KSURTX0RFU0tUT1AJCSK1pb26xanFviIKSURTX01ZQ09NUFVURVIJCSKzuyDExMe7xc0iCgovKiBjb250ZXh0IG1lbnVzICovCklEU19WSUVXX0xBUkdFCQkixasgvsbAzMTcKCZnKSIKSURTX1ZJRVdfU01BTEwJCSLA28C6IL7GwMzE3CgmbSkiCklEU19WSUVXX0xJU1QJCSK48bfPKCZMKSIKSURTX1ZJRVdfREVUQUlMUwkiwNq8vMj3KCZEKSIKSURTX1NFTEVDVAkJIryxxcMiCklEU19PUEVOCQkiv62x4iIKCklEU19DUkVBVEVGT0xERVJfREVOSUVEICK79SDG+rT1uKYguLi16SC89iC++L3AtM+02ToguLi16SCxx8fRwMwgvvi9wLTPtNkuIgpJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIrv1IMb6tPW4piC4uLXltMIgsPrBpL+hvK0gv6G3r7nfu/0iCklEU19ERUxFVEVJVEVNX0NBUFRJT04gIsbEwM8gwfa/7LHiIMiuwM4iCklEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAixvq09SDB9r/sseIgyK7AziIKSURTX0RFTEVURUlURU1fVEVYVCAitOe9xcC6ICAnJTEnwLsgwfa/7LHiuKYgudm2+LTPse4/IgpJRFNfREVMRVRFTVVMVElQTEVfVEVYVCAitOe9xcC6IMDMsM0gJTEgvsbAzMXbwLsgwfa/7LHiuKYgudm2+LTPse4/IgpJRFNfT1ZFUldSSVRFRklMRV9URVhUICLGxMDPICUxwLsgtaS+7r6ysNq9wLTPse4/IgpJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICLGxMDPILWkvu6+srHiIMiuwM4iCgovKiBtZXNzYWdlIGJveCBzdHJpbmdzICovCklEU19SRVNUQVJUX1RJVExFICAgICAgICK02b3DIL3DwNsiCklEU19SRVNUQVJUX1BST01QVCAgICAgICK0573FwLogwKm1tb/swe4gwOe6zsbDwLsgIMDnx/bHz7DavcC0z7HuPyIKSURTX1NIVVRET1dOX1RJVExFICAgICAgIrL0seIiCklEU19TSFVURE9XTl9QUk9NUFQgICAgICK0573FwLogIFdpbmUgvLy8x8C7ILL0sNq9wLTPse4/IgoKLyogc2hlbGwgZm9sZGVyIHBhdGggZGVmYXVsdCB2YWx1ZXMgKi8KSURTX1BST0dSQU1TICAgICAgICAgICAgICAgICJTdGFydCBNZW51XFxQcm9ncmFtcyIKSURTX1BFUlNPTkFMICAgICAgICAgICAgICAgICJNeSBEb2N1bWVudHMiCklEU19GQVZPUklURVMgICAgICAgICAgICAgICAiRmF2b3JpdGVzIgpJRFNfU1RBUlRVUCAgICAgICAgICAgICAgICAgIlN0YXJ0IE1lbnVcXFByb2dyYW1zXFxTdGFydFVwIgpJRFNfUkVDRU5UICAgICAgICAgICAgICAgICAgIlJlY2VudCIKSURTX1NFTkRUTyAgICAgICAgICAgICAgICAgICJTZW5kVG8iCklEU19TVEFSVE1FTlUgICAgICAgICAgICAgICAiU3RhcnQgTWVudSIKSURTX01ZTVVTSUMgICAgICAgICAgICAgICAgICJNeSBNdXNpYyIKSURTX01ZVklERU8gICAgICAgICAgICAgICAgICJNeSBWaWRlbyIKSURTX0RFU0tUT1BESVJFQ1RPUlkgICAgICAgICJEZXNrdG9wIgpJRFNfTkVUSE9PRCAgICAgICAgICAgICAgICAgIk5ldEhvb2QiCklEU19URU1QTEFURVMgICAgICAgICAgICAgICAiVGVtcGxhdGVzIgpJRFNfQVBQREFUQSAgICAgICAgICAgICAgICAgIkFwcGxpY2F0aW9uIERhdGEiCklEU19QUklOVEhPT0QgICAgICAgICAgICAgICAiUHJpbnRIb29kIgpJRFNfTE9DQUxfQVBQREFUQSAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxBcHBsaWNhdGlvbiBEYXRhIgpJRFNfSU5URVJORVRfQ0FDSEUgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxUZW1wb3JhcnkgSW50ZXJuZXQgRmlsZXMiCklEU19DT09LSUVTICAgICAgICAgICAgICAgICAiQ29va2llcyIKSURTX0hJU1RPUlkgICAgICAgICAgICAgICAgICJMb2NhbCBTZXR0aW5nc1xcSGlzdG9yeSIKSURTX1BST0dSQU1fRklMRVMgICAgICAgICAgICJQcm9ncmFtIEZpbGVzIgpJRFNfTVlQSUNUVVJFUyAgICAgICAgICAgICAgIk15IFBpY3R1cmVzIgpJRFNfUFJPR1JBTV9GSUxFU19DT01NT04gICAgIlByb2dyYW0gRmlsZXNcXENvbW1vbiBGaWxlcyIKSURTX0NPTU1PTl9ET0NVTUVOVFMgICAgICAgICJEb2N1bWVudHMiCklEU19BRE1JTlRPT0xTICAgICAgICAgICAgICAiU3RhcnQgTWVudVxcUHJvZ3JhbXNcXEFkbWluaXN0cmF0aXZlIFRvb2xzIgpJRFNfQ09NTU9OX01VU0lDICAgICAgICAgICAgIkRvY3VtZW50c1xcTXkgTXVzaWMiCklEU19DT01NT05fUElDVFVSRVMgICAgICAgICAiRG9jdW1lbnRzXFxNeSBQaWN0dXJlcyIKSURTX0NPTU1PTl9WSURFTyAgICAgICAgICAgICJEb2N1bWVudHNcXE15IFZpZGVvIgpJRFNfQ0RCVVJOX0FSRUEgICAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxBcHBsaWNhdGlvbiBEYXRhXFxNaWNyb3NvZnRcXENEIEJ1cm5pbmciCn0K