LyoKICogT2xlVmlldyAoS28ucmMpCiAqIEtvcmVhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA2IFBpb3RyIENhYmFuCiAqIENvcHlyaWdodCAyMDA2IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKSURNX01FTlUgTUVOVQp7CiAgICBQT1BVUCAixsTAzygmRikiCiAgICB7CiAgICAgICAgTUVOVUlURU0gIsbEwM+/oSC/rLDhKCZCKS4uLiIsICAgIElETV9CSU5ECiAgICAgICAgTUVOVUlURU0gIsW4wNQgtvPAzLrqt6+4riC6uLHiKCZWKS4uLiIsICAgIElETV9UWVBFTElCCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIr3DvbrF2yC8s8GkKCZTKSIsICAgIElETV9TWVNDT05GCiAgICAgICAgTUVOVUlURU0gIre5wfa9usauuK4gxu3B/bHiIL3Hx+AoJlIpIiwgICAgSURNX1JFR0VESVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAis6qwobHiKCZYKSIsICAgIElETV9FWElUCiAgICB9CiAgICBQT1BVUCAiILC0w7woJk8pIgogICAgewogICAgICAgIFBPUFVQICImQ29DcmVhdGVJbnN0YW5jZSDHw7ehsdciCiAgICAgICAgewogICAgICAgICAgICBNRU5VSVRFTSAiQ0xTQ1RYXyZJTlBST0NfU0VSVkVSIiwgICAgSURNX0ZMQUdfSU5TRVJWLENIRUNLRUQKICAgICAgICAgICAgTUVOVUlURU0gIkNMU0NUWF9JTlBST0NfJkhBTkRMRVIiLCAgICBJRE1fRkxBR19JTkhBTkRMCiAgICAgICAgICAgIE1FTlVJVEVNICJDTFNDVFhfJkxPQ0FMX1NFUlZFUiIsICAgICAgICBJRE1fRkxBR19MT0NTRVJWLENIRUNLRUQKICAgICAgICAgICAgTUVOVUlURU0gIkNMU0NUWF8mUkVNT1RFX1NFUlZFUiIsICAgIElETV9GTEFHX1JFTVNFUlYKICAgICAgICB9CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsW4wNQgwaS6uCC6uLHiKCZUKSIsICAgIElETV9UWVBFSU5GTywgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsDOvbrFz726ILi4temx4igmSSkiLCAgICBJRE1fQ1JFQVRFSU5TVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIsDOvbrFz8auIL/CKEluc3RhbmNlICZPbikguLi16bHiIiwgICAgSURNX0NSRUFURUlOU1RPTiwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIsDOvbrFz8auIMfYwabHz7HiKCZSKSIsICAgIElETV9SRUxFQVNFSU5TVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkMmTFNJRLimIMWsuLO6uLXlt84gurm75yIsICAgIElETV9DT1BZQ0xTSUQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICImSFRNTCCwtMO8IMXCsde4piDFrLizuri15bfOILq5u+ciLCBJRE1fSFRNTFRBRywgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIrq4seIoJlYpLi4uIiwgICAgSURNX1ZJRVcsIEdSQVlFRAogICAgfQogICAgUE9QVVAgIrq4seIoJlYpIgogICAgewogICAgICAgIE1FTlVJVEVNICLA/LmusKEguPC15SgmRSkiLCAgICBJRE1fRVhQRVJULENIRUNLRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAixMTG97PNxq4gutC3+SC8+7HiseIoJkgpIiwgICAgSURNX0hJRERFTiwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIrW1sbi52SgmVCkiLCAgICBJRE1fVE9PTEJBUixDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIrvzxcK52SgmUykiLCAgICBJRE1fU1RBVFVTQkFSLENIRUNLRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiu/W3ziCw7cSnKCZSKVx0RjUiLCAgICBJRE1fUkVGUkVTSAogICAgfQogICAgUE9QVVAgIrW1v/K4uygmSCkiCiAgICB7CiAgICAgICAgTUVOVUlURU0gIk9sZVZpZXcgwaS6uCgmQSkiLCAgICBJRE1fQUJPVVQKICAgIH0KfQoKSURNX1RZUEVMSUIgTUVOVQp7CiAJUE9QVVAgIsbEwM8oJkYpIgoJewoJCU1FTlVJVEVNICK02bilIMDMuKfAuLfOIMD6wOUoJlMpIiwgICAgSURNX1NBVkVBUwoJCU1FTlVJVEVNICK03bHiKCZDKSIsICBJRE1fQ0xPU0UKCX0KCVBPUFVQICK6uLHiKCZWKSIKCXsKCQlNRU5VSVRFTSAixbjA1CDBvrf5v6Egtfu28yCxuLrQKCZHKSIsIElETV9HUk9VUAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICK1tbG4udkoJlQpIiwgICAgSURNX1RPT0xCQVIKCQlNRU5VSVRFTSAiu/PFwrnZKCZTKSIsIElETV9TVEFUVVNCQVIsQ0hFQ0tFRAoJfQp9CgoKU1RSSU5HVEFCTEUKewogICAgSURTX0FQUE5BTUUgICAgICAgICAgICAiT2xlVmlldyIKICAgIElEU19BUFBUSVRMRSAgICAgICAgICAgIk9sZVZpZXciCiAgICBJRFNfUkVBRFkgICAgICAgICAgICAgICLB2LrxIgogICAgSURTX0FCT1VUICAgICAgICAgICAgICAiT2xlVmlldyAtIE9MRS9DT00gsLTDvCC65L7uIgogICAgSURTX0FCT1VUVkVSICAgICAgICAgICAiufbBryAxLjAiCiAgICBJRFNfVFlQRUxJQlRJVExFICAgICAgICJJVHlwZUxpYiC65L7uIgogICAgCiAgICBJRE1fQklORCwgICAgICAgICAgICAgICLGxMDPILqwuO3AuLfOIMbEwM8gv6yw4SIKICAgIElETV9UWVBFTElCLCAgICAgICAgICAgIsW4wNQgtvPAzLrqt6+4riDGxMDPwLsgv62w7SCzu7/rILq4seIiCiAgICBJRE1fU1lTQ09ORiwgICAgICAgICAgICK4073FIMD8w7zAxyBEQ09NvLPBpCC52bLZseIiCiAgICBJRE1fUkVHRURJVCwgICAgICAgICAgICJXaW5lILe5wfa9usauuK4gxu3B/bHiIL3Hx+AiCiAgICBJRE1fRVhJVCwgICAgICAgICAgICAgICK52bLvILDNwLsgwPrA5cfSwfYgubC+7rq4sO0gx8G3zrHXt6Ugs6Gzu7HiIgogICAgSURNX0NSRUFURUlOU1QsICAgICAgICAivLHFw7XIILC0w7zAxyDAzr26xc/GriC4uLXpseIiCiAgICBJRE1fQ1JFQVRFSU5TVE9OLCAgICAgICLB9sGktcgguNO9xcDHILyxxcO1yCCwtMO8wMcgwM69usXPxq4guLi16bHiIgogICAgSURNX1JFTEVBU0VJTlNULCAgICAgICAix/bA5yC8scXDtcggsLTDvCDAzr26xc/GriDH2MGmx8+x4iIKICAgIElETV9DT1BZQ0xTSUQsICAgICAgICAgIsf2wOcgvLHFw7XIIMfXuPHAxyBHVUlEuKYgxay4s7q4teW3ziC6ubvnIgogICAgSURNX1ZJRVcsICAgICAgICAgICAgICAivLHFw7XIIMfXuPHAxyC65L7uILq4seIiCiAgICBJRE1fRkxBR19JTlNFUlYsICAgICAgICJDb0dldENsYXNzT2JqZWN0wMwgyKPD4rXJILanIFVzZSBDTFNDVFhfSU5QUk9DX1NFUlZFUiC757/rIgogICAgSURNX0ZMQUdfSU5IQU5ETCwgICAgICAiQ29HZXRDbGFzc09iamVjdMDMIMijw+K1ySC2pyBVc2UgQ0xTQ1RYX0lOUFJPQ19IQU5ETEVSILvnv+siCiAgICBJRE1fRkxBR19MT0NTRVJWLCAgICAgICJDb0dldENsYXNzT2JqZWN0wMwgyKPD4rXJILanIENMU0NUWF9MT0NBTF9TRVJWRVIgu+e/6yIKICAgIElETV9GTEFHX1JFTVNFUlYsICAgICAgIkNvR2V0Q2xhc3NPYmplY3TAzCDIo8PitckgtqcgQ0xTQ1RYX1JFTU9URV9TRVJWRVIgILvnv+siCiAgICBJRE1fRVhQRVJULCAgICAgICAgICAgICLA/LmusKG/zSDDyrq4wNoguPC15SDA/MivZSIKICAgIElETV9ISURERU4sICAgICAgICAgICAgIsTExvezzcauILjxt88gurix4ii6uMDMwfYgvsq09bbztbUpIgogICAgSURNX1RPT0xCQVIsICAgICAgICAgICAitbWxuLnZILq4seIvvPux4rHiIgogICAgSURNX1NUQVRVU0JBUiwgICAgICAgICAiu/PFwrnZILq4seIvvPux4rHiIgogICAgSURNX1JFRlJFU0gsICAgICAgICAgICAiuPC15yC48bfPILv1t84gsO3EpyIKICAgIElETV9BQk9VVCwgICAgICAgICAgICAgIsfBt86x17elIMGkurgsILn2wa8sIMD6wNuxxyC6uL+pwdax4iIKCiAgICBJRE1fU0FWRUFTLCAgICAgICAgICAgICIuSURMIMDMs6ogLkggZmlsZbfOIMD6wOUiCiAgICBJRE1fQ0xPU0UsICAgICAgICAgICAgICLDoiC03bHiIgogICAgSURNX0dST1VQLCAgICAgICAgICAgICAixbjA1MGkuri4piDFuMDUv6Egtfu28yC60Lf5IgoKICAgIElEU19UUkVFX09DLCAgICAgICAgICAgIk9iamVjdENsYXNzZXMiCiAgICBJRFNfVFJFRV9HQkNDLCAgICAgICAgICLExMb3xc/GriC60Lf5IgogICAgSURTX1RSRUVfTzFPLCAgICAgICAgICAiT0xFIDEuMCCwtMO8IgogICAgSURTX1RSRUVfQ0xPLCAgICAgICAgICAiQ09NILbzwMy66revuK4gsLTDvCIKICAgIElEU19UUkVFX0FPLCAgICAgICAgICAgIrjwtecgsLTDvCIKICAgIElEU19UUkVFX0FJRCwgICAgICAgICAgIsfBt86x17elIElEcyIKICAgIElEU19UUkVFX1RMLCAgICAgICAgICAgIsW4wNQgtvPAzLrqt6+4riIKICAgIElEU19UTF9WRVIsICAgICAgICAgICAgInZlci4iCiAgICBJRFNfVFJFRV9JLCAgICAgICAgICAgICLAzsXNxuTAzL26IgoKICAgIElEU19UQUJfUkVHLCAgICAgICAgICAgIlJlZ2lzdHJ5IgogICAgSURTX1RBQl9JTVBMLCAgICAgICAgICAiSW1wbGVtZW50YXRpb24iCiAgICBJRFNfVEFCX0FDVElWLCAgICAgICAgICJBY3RpdmF0aW9uIgoKICAgIElEU19DR0NPRkFJTCwgICAgICAgICAgIkNvR2V0Q2xhc3NPYmplY3QgvcfG0C4iCiAgICBJRFNfRVJST1JfVU5LTiwgICAgICAgICK+y7z2IL74tMIgv6G3ryIKICAgIElEU19UUlVFICAgICAgICAgICAgICAgIsL8IgogICAgSURTX0ZBTFNFICAgICAgICAgICAgICAisMXB/iIKICAgIElEU19CWVRFUyAgICAgICAgICAgICAgIrnZwMzGriIKfQoKRExHX0NSRUFURUlOU1RPTiBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjUwLCA0MQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAitNm4pSC4073FKG1hY2hpbmUpv6EgwaK80yIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAgICK4073FKCZNYWNoaW5lKSDAzLinOiIsIElESUdOT1JFLCA1LCA2LCAxOTAsIDgKICAgIEVESVRURVhUICAgIElEQ19NQUNISU5FLCA1LCAxNiwgMTkwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICAgIsiuwM4oJk8pIiwgSURPSywgMjAwLCA1LCA0NSwgMTQKICAgIFBVU0hCVVRUT04gICLD67zSKCZDKSIsIElEQ0FOQ0VMLCAyMDAsIDIyLCA0NSwgMTQKfQoKRExHX1NZU0NPTkYgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE3MCwgMTAwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICK9w726xdsgvLPBpCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAgICK9w726xdsgvMLGwyIsIElESUdOT1JFLCA1LCA2LCAxNjAsIDgKICAgIENIRUNLQk9YICAgICJEQ09NIMfjv+soJkUpIiwgSURDX0VOQUJMRURDT00sIDUsIDIwLCAxNjAsIDEwLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBCU19BVVRPQ0hFQ0tCT1gKICAgIENIRUNLQk9YICAgICK/+LDdIL+ssOEgx+O/6ygmUikgKFdpbjk1uLggx9i05ykiLCBJRENfRU5BQkxFUkVNT1RFLCA1LCAzNSwgMTYwLCAxMCwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBMVEVYVCAgICLAzCC8wsbDwLogv8DB9yC3ucH2vbrGrriuILCquLggudmy37TPtNkuXG5XSW5lwMcgvLq0yb+htMIgvsa5qyC/tcfiwLsgvsgguczEqLTPtNkuIiwgSURJR05PUkUsIDUsIDUwLCAxNjAsIDQwCiAgICBERUZQVVNIQlVUVE9OICAgIsiuwM4oJk8pIiwgSURPSywgNzAsIDgwLCA0NSwgMTQKICAgIFBVU0hCVVRUT04gICLD67zSKCZDKSIsIElEQ0FOQ0VMLCAxMjAsIDgwLCA0NSwgMTQKfQoKRExHX0RFRkFVTFRfSVYgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI4MCwgNTAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIrHiursgwM7FzcbkwMy9uiC6uLHiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICBMVEVYVCAgICLAzsXNxuTAzL26IiwgSURJR05PUkUsIDUsIDYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0xBQkVMLCA2MCwgNiwgMTQ1LCA4CiAgTFRFWFQgICAiSUlEOiIsIElESUdOT1JFLCA1LCAxNiwgNTAsIDgKICBMVEVYVCAgICIiLCBJRENfSURFTlRJRklFUiwgNjAsIDE2LCAxNjUsIDgKICBERUZQVVNIQlVUVE9OICAgIrTdseIoJkMpIiwgSURDQU5DRUwsIDIzMCwgNiwgNDUsIDE0CiAgUFVTSEJVVFRPTiAgIsW4wNQgwaS6uCC6uLHiKCZWKSIsIElEQ19WSUVXVFlQRUlORk8sIDYsIDMxLCA3MCwgMTQsIFdTX0RJU0FCTEVECn0KCkRMR19JUEVSU0lTVF9JViBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjgwLCAyOQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSVBlcnNpc3QgwM7FzcbkwMy9uiC6uLHiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICBMVEVYVCAgICLFrLehvbogwMy4pzoiLCBJRElHTk9SRSwgNSwgNiwgNTAsIDgKICBMVEVYVCAgICIiLCBJRENfTEFCRUwsIDYwLCA2LCAxNDUsIDgKICBMVEVYVCAgICJDTFNJRDoiLCBJRElHTk9SRSwgNSwgMTYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0lERU5USUZJRVIsIDYwLCAxNiwgMTY1LCA4CiAgREVGUFVTSEJVVFRPTiAgICK03bHiKCZDKSIsIElEQ0FOQ0VMLCAyMzAsIDYsIDQ1LCAxNAp9CgpETEdfSVBFUlNJU1RTVFJFQU1fSVYgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI4MCwgNjgKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIklQZXJzaXN0U3RyZWFtIMDOxc3G5MDMvbogurix4iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgTFRFWFQgICAixay3ob26IMDMuKc6IiwgSURJR05PUkUsIDUsIDYsIDUwLCA4CiAgTFRFWFQgICAiIiwgSURDX0xBQkVMLCA2MCwgNiwgMTQ1LCA4CiAgTFRFWFQgICAiQ0xTSUQ6IiwgSURJR05PUkUsIDUsIDE2LCA1MCwgOAogIExURVhUICAgIiIsIElEQ19JREVOVElGSUVSLCA2MCwgMTYsIDE2NSwgOAogIERFRlBVU0hCVVRUT04gICAitN2x4igmQykiLCBJRENBTkNFTCwgMjMwLCA2LCA0NSwgMTQKICBQVVNIQlVUVE9OICAiJklzRGlydHkiLCBJRENfSVNESVJUWV9CVVRUT04sIDYsIDMxLCA1MCwgMTQKICBMVEVYVCAgICI/Pz8iLCBJRENfSVNESVJUWSwgNjAsIDM0LCAxNDUsIDgKICBQVVNIQlVUVE9OICAiJkdldFNpemVNYXgiLCBJRENfR0VUU0laRU1BWF9CVVRUT04sIDYsIDQ5LCA1MCwgMTQKICBMVEVYVCAgICI/Pz8iLCBJRENfR0VUU0laRU1BWCwgNjAsIDUyLCAxNDUsIDgKfQoK