0x60806040523480156200001157600080fd5b5060405162001c7f38038062001c7f8339810160408190526200003491620004b1565b82826001600160a01b038216620000925760405162461bcd60e51b815260206004820152601e60248201527f4d616e61676561626c653a2061646d696e2061646472657373207a65726f000060448201526064015b60405180910390fd5b6200009f60008362000102565b620000cb7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08826200018b565b50620000d99050816200026c565b600180546001600160a01b0319166001600160a01b0392909216919091179055506200063f9050565b6200010e828262000301565b62000187576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001463390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60005b8151811015620002675760006001600160a01b0316828281518110620001b857620001b8620005ac565b60200260200101516001600160a01b031603620002245760405162461bcd60e51b815260206004820152602360248201527f457874656e646564416363657373436f6e74726f6c3a2041646472657373207a60448201526265726f60e81b606482015260840162000089565b62000252838383815181106200023e576200023e620005ac565b60200260200101516200010260201b60201c565b806200025e81620005c2565b9150506200018e565b505050565b6200028a81636577eab560e01b6200032c60201b6200067b1760201c565b620002fe5760405162461bcd60e51b815260206004820152603660248201527f496d706c656d656e746174696f6e206d75737420737570706f72742049416e7460448201527f6963466565436f6c6c6563746f7250726f766964657200000000000000000000606482015260840162000089565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b6000620003398362000354565b80156200034d57506200034d83836200038c565b9392505050565b600062000369826301ffc9a760e01b6200038c565b801562000326575062000385826001600160e01b03196200038c565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090620003f5908690620005ea565b6000604051808303818686fa925050503d806000811462000433576040519150601f19603f3d011682016040523d82523d6000602084013e62000438565b606091505b509150915060208151101562000455576000935050505062000326565b818015620004745750808060200190518101906200047491906200061b565b9695505050505050565b80516001600160a01b03811681146200049657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215620004c757600080fd5b620004d2846200047e565b602085810151919450906001600160401b0380821115620004f257600080fd5b818701915087601f8301126200050757600080fd5b8151818111156200051c576200051c6200049b565b8060051b604051601f19603f830116810181811085821117156200054457620005446200049b565b60405291825284820192508381018501918a8311156200056357600080fd5b938501935b828510156200058c576200057c856200047e565b8452938501939285019262000568565b809750505050505050620005a3604085016200047e565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201620005e357634e487b7160e01b600052601160045260246000fd5b5060010190565b6000825160005b818110156200060d5760208186018101518583015201620005f1565b506000920191825250919050565b6000602082840312156200062e57600080fd5b815180151581146200034d57600080fd5b611630806200064f6000396000f3fe6080604052600436106100a75760003560e01c806341b555831161006457806341b55583146101b35780635c60da1b146101eb57806391d148541461020b578063a217fddf1461022b578063d547741f14610240578063ec87621c1461026057600080fd5b806301ffc9a7146100ac57806317a68dd8146100e1578063248a9ca31461010357806327ed3811146101415780632f2ff15d1461017357806336568abe14610193575b600080fd5b3480156100b857600080fd5b506100cc6100c7366004610ee5565b610294565b60405190151581526020015b60405180910390f35b3480156100ed57600080fd5b506101016100fc366004610f24565b6102cb565b005b34801561010f57600080fd5b5061013361011e366004610f41565b60009081526020819052604090206001015490565b6040519081526020016100d8565b61015461014f366004610ffd565b6103c9565b604080516001600160a01b0390931683526020830191909152016100d8565b34801561017f57600080fd5b5061010161018e36600461106a565b6104f6565b34801561019f57600080fd5b506101016101ae36600461106a565b610520565b3480156101bf57600080fd5b506101d36101ce36600461109a565b6105a1565b6040516001600160a01b0390911681526020016100d8565b3480156101f757600080fd5b506001546101d3906001600160a01b031681565b34801561021757600080fd5b506100cc61022636600461106a565b61062d565b34801561023757600080fd5b50610133600081565b34801561024c57600080fd5b5061010161025b36600461106a565b610656565b34801561026c57600080fd5b506101337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b60006001600160e01b03198216637965db0b60e01b14806102c557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6102d660003361062d565b8061030657506103067f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b083361062d565b6103575760405162461bcd60e51b815260206004820152601f60248201527f4d616e61676561626c653a20556e617574686f72697a6564206163636573730060448201526064015b60405180910390fd5b6103608161069e565b600154604080516001600160a01b03808516825290921660208301527fcfbf4028add9318bbf716f08c348595afb063b0e9feed1f86d33681a4b3ed4d3910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060005a90506103db868661071d565b92505a6103e890826110dc565b604080516001600160a01b0386168152602081018390529193507f2ff7873895f4a1cad034d792d2d0b8674074f739be42b3dbecf0df4dc8eb58bd910160405180910390a16040516331dbaa1360e21b8152600481018390523360248201526001600160a01b0384169063c76ea84c90604401600060405180830381600087803b15801561047557600080fd5b505af1158015610489573d6000803e3d6000fd5b50506040516330b858b160e11b81526001600160a01b0386169250636170b162915034906104bb90889060040161113f565b6000604051808303818588803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050505050935093915050565b6000828152602081905260409020600101546105118161099d565b61051b83836109a7565b505050565b816105935760405162461bcd60e51b815260206004820152603c60248201527f457874656e646564416363657373436f6e74726f6c3a20696e63617061626c6560448201527f206f662072656e6f756e63696e672064656661756c742061646d696e00000000606482015260840161034e565b61059d8282610a2b565b5050565b60015460009081906105bb906001600160a01b0316610aa5565b905060006105c98585610b10565b8251602093840120604080516001600160f81b0319818701523060601b6bffffffffffffffffffffffff1916602182015260358101939093526055808401929092528051808403909201825260759092019091528051920191909120949350505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000828152602081905260409020600101546106718161099d565b61051b8383610b57565b600061068683610bbc565b801561069757506106978383610bef565b9392505050565b6106af81636577eab560e01b61067b565b61071a5760405162461bcd60e51b815260206004820152603660248201527f496d706c656d656e746174696f6e206d75737420737570706f72742049416e7460448201527534b1a332b2a1b7b63632b1ba37b9283937bb34b232b960511b606482015260840161034e565b50565b60008082511161076f5760405162461bcd60e51b815260206004820152601b60248201527f4d697373696e6720696e697469616c697a6174696f6e20646174610000000000604482015260640161034e565b826107a95760405162461bcd60e51b815260206004820152600a602482015269115b5c1d1e481cd85b1d60b21b604482015260640161034e565b60006107b53385610b10565b60015460405191925082916001600160a01b03909116906107d590610ed8565b6001600160a01b0390911681526020018190604051809103906000f5905080158015610805573d6000803e3d6000fd5b50600154604080516001600160a01b03808516825290921660208301529193507fae93c8e84b9065113a0230417359f283712a933bdab9abc10fcb1179edc6b1c8910160405180910390a160015460408051631c54dfad60e31b815290516001600160a01b0390921691600091839163e2a6fd68916004808201926020929091908290030181865afa15801561089f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c39190611152565b9050600080836001600160a01b031663fae52f2e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109299190611186565b604051631356078b60e01b815291935091506001600160a01b03871690631356078b90610960908690869086908d906004016111b9565b600060405180830381600087803b15801561097a57600080fd5b505af115801561098e573d6000803e3d6000fd5b50505050505050505092915050565b61071a8133610cd8565b6109b1828261062d565b61059d576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556109e73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b0381163314610a9b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161034e565b61059d8282610b57565b606060405180602001610ab790610ed8565b601f1982820381018352601f9091011660408181526001600160a01b03851660208301520160408051601f1981840301815290829052610afa92916020016111ef565b6040516020818303038152906040529050919050565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b610b61828261062d565b1561059d576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bcf826301ffc9a760e01b610bef565b80156102c55750610be8826001600160e01b0319610bef565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090610c5690869061121e565b6000604051808303818686fa925050503d8060008114610c92576040519150601f19603f3d011682016040523d82523d6000602084013e610c97565b606091505b5091509150602081511015610cb257600093505050506102c5565b818015610cce575080806020019051810190610cce919061123a565b9695505050505050565b610ce2828261062d565b61059d57610cfa816001600160a01b03166014610d3c565b610d05836020610d3c565b604051602001610d1692919061125c565b60408051601f198184030181529082905262461bcd60e51b825261034e9160040161113f565b60606000610d4b8360026112d1565b610d569060026112f0565b67ffffffffffffffff811115610d6e57610d6e610f5a565b6040519080825280601f01601f191660200182016040528015610d98576020820181803683370190505b509050600360fc1b81600081518110610db357610db3611303565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610de257610de2611303565b60200101906001600160f81b031916908160001a9053506000610e068460026112d1565b610e119060016112f0565b90505b6001811115610e89576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610e4557610e45611303565b1a60f81b828281518110610e5b57610e5b611303565b60200101906001600160f81b031916908160001a90535060049490941c93610e8281611319565b9050610e14565b5083156106975760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161034e565b6102ca8061133183390190565b600060208284031215610ef757600080fd5b81356001600160e01b03198116811461069757600080fd5b6001600160a01b038116811461071a57600080fd5b600060208284031215610f3657600080fd5b813561069781610f0f565b600060208284031215610f5357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610f8157600080fd5b813567ffffffffffffffff80821115610f9c57610f9c610f5a565b604051601f8301601f19908116603f01168101908282118183101715610fc457610fc4610f5a565b81604052838152866020858801011115610fdd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561101257600080fd5b83359250602084013567ffffffffffffffff8082111561103157600080fd5b61103d87838801610f70565b9350604086013591508082111561105357600080fd5b5061106086828701610f70565b9150509250925092565b6000806040838503121561107d57600080fd5b82359150602083013561108f81610f0f565b809150509250929050565b600080604083850312156110ad57600080fd5b82356110b881610f0f565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102c5576102c56110c6565b60005b8381101561110a5781810151838201526020016110f2565b50506000910152565b6000815180845261112b8160208601602086016110ef565b601f01601f19169290920160200192915050565b6020815260006106976020830184611113565b60006020828403121561116457600080fd5b815161069781610f0f565b805161ffff8116811461118157600080fd5b919050565b6000806040838503121561119957600080fd5b6111a28361116f565b91506111b06020840161116f565b90509250929050565b6001600160a01b038516815261ffff848116602083015283166040820152608060608201819052600090610cce90830184611113565b600083516112018184602088016110ef565b8351908301906112158183602088016110ef565b01949350505050565b600082516112308184602087016110ef565b9190910192915050565b60006020828403121561124c57600080fd5b8151801515811461069757600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516112948160178501602088016110ef565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516112c58160288401602088016110ef565b01602801949350505050565b60008160001904831182151516156112eb576112eb6110c6565b500290565b808201808211156102c5576102c56110c6565b634e487b7160e01b600052603260045260246000fd5b600081611328576113286110c6565b50600019019056fe608060405234801561001057600080fd5b506040516102ca3803806102ca83398101604081905261002f9161008c565b600061004361006860201b6100d11760201c565b80546001600160a01b0319166001600160a01b039390931692909217909155506100bc565b7fe361bf45a7d0fb3f549ba2a6b8f80b462e8e78fae9a8b1cb3bf8615ae7b0710b90565b60006020828403121561009e57600080fd5b81516001600160a01b03811681146100b557600080fd5b9392505050565b6101ff806100cb6000396000f3fe6080604052600061000e6100d1565b80546040516366ffd66360e11b8152600080356001600160e01b03191660048301529293506001600160a01b039091169063cdffacc690602401602060405180830381865afa158015610065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100899190610125565b90506100ad816040518060600160405280602681526020016101a4602691396100f5565b3660008037600080366000845af43d6000803e8080156100cc573d6000f35b3d6000fd5b7fe361bf45a7d0fb3f549ba2a6b8f80b462e8e78fae9a8b1cb3bf8615ae7b0710b90565b813b818161011f5760405162461bcd60e51b81526004016101169190610155565b60405180910390fd5b50505050565b60006020828403121561013757600080fd5b81516001600160a01b038116811461014e57600080fd5b9392505050565b600060208083528351808285015260005b8181101561018257858101830151858201604001528201610166565b506000604082860101526040601f19601f830116850101925050509291505056fe446f6d696e69756d50726f78793a2046756e6374696f6e20646f6573206e6f74206578697374a2646970667358221220f83d04505f6a63ac87ee2238bd3d3c2e1a2db2203b0aa553701ef1d9fbf8a49664736f6c63430008100033a2646970667358221220cac84988d0770beabfc71c6180b011a7e29758306ec595908d9d6c915f079a2e64736f6c6343000810003300000000000000000000000027c2470b4d650c70b4eef8df0ee18e0e4d70284e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000a185d559f6da2fecd42583644e934b3937cfb4aa0000000000000000000000000000000000000000000000000000000000000000