60806040526509184e72a00060005534801561001a57600080fd5b506040516115a73803806115a783398101604081905261003991610076565b600080546001600160a01b0392909216815260026020526040902080546001600160401b0319166001600160401b039092169190911790556100a6565b60006020828403121561008857600080fd5b81516001600160a01b038116811461009f57600080fd5b9392505050565b6114f2806100b56000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80636fcfff451161009757806395d89b411161006657806395d89b41146102de578063a9059cbb1461031a578063b4b5ea571461032d578063f1127ed81461034057600080fd5b80636fcfff451461022457806370a082311461025f578063782d6fe1146102925780637ecebe00146102be57600080fd5b806323b872dd116100d357806323b872dd146101a1578063313ce567146101b4578063587cde1e146101ce5780635c19a95c1461020f57600080fd5b806301ffc9a71461010557806306fdde031461012e578063095ea7b31461017757806318160ddd1461018a575b600080fd5b6101196101133660046110ec565b50600090565b60405190151581526020015b60405180910390f35b61016a6040518060400160405280600881526020017f464845546f6b656e00000000000000000000000000000000000000000000000081525081565b604051610125919061112e565b610119610185366004611199565b6103aa565b61019360005481565b604051908152602001610125565b6101196101af3660046111c3565b610454565b6101bc600681565b60405160ff9091168152602001610125565b6101f76101dc3660046111ff565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610125565b61022261021d3660046111ff565b610588565b005b61024a6102323660046111ff565b60056020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610125565b61019361026d3660046111ff565b6001600160a01b031660009081526002602052604090205467ffffffffffffffff1690565b6102a56102a0366004611199565b610595565b60405167ffffffffffffffff9091168152602001610125565b6101936102cc3660046111ff565b60066020526000908152604090205481565b61016a6040518060400160405280600481526020017f464845540000000000000000000000000000000000000000000000000000000081525081565b610119610328366004611199565b610840565b6102a561033b3660046111ff565b61087c565b61038561034e36600461121a565b600460209081526000928352604080842090915290825290205463ffffffff811690640100000000900467ffffffffffffffff1682565b6040805163ffffffff909316835267ffffffffffffffff909116602083015201610125565b6000806103cf8360405180606001604052806024815260200161144a602491396108fc565b3360008181526001602090815260408083206001600160a01b038a1680855290835292819020805467ffffffffffffffff191667ffffffffffffffff8716908117909155905190815293945090927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b60008061047983604051806060016040528060298152602001611355602991396108fc565b6001600160a01b0386166000818152600160209081526040808320338085529252909120549293509167ffffffffffffffff169082148015906104c6575067ffffffffffffffff81811614155b156105705760006104f082856040518060600160405280603d81526020016113d9603d9139610930565b6001600160a01b03898116600081815260016020908152604080832094891680845294825291829020805467ffffffffffffffff191667ffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61057b87878561097c565b5060019695505050505050565b6105923382610c24565b50565b60004382106106115760405162461bcd60e51b815260206004820152602760248201527f464845543a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e65640000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03831660009081526005602052604081205463ffffffff169081900361064257600091505061044e565b6001600160a01b03841660009081526004602052604081208491610667600185611270565b63ffffffff908116825260208201929092526040016000205416116106dc576001600160a01b0384166000908152600460205260408120906106aa600184611270565b63ffffffff168152602081019190915260400160002054640100000000900467ffffffffffffffff16915061044e9050565b6001600160a01b038416600090815260046020908152604080832083805290915290205463ffffffff1683101561071757600091505061044e565b600080610725600184611270565b90505b8163ffffffff168163ffffffff1611156107f9576000600261074a8484611270565b6107549190611294565b61075e9083611270565b6001600160a01b038816600090815260046020908152604080832063ffffffff85811685529083529281902081518083019092525492831680825264010000000090930467ffffffffffffffff16918101919091529192508790036107cd5760200151945061044e9350505050565b805163ffffffff168711156107e4578193506107f2565b6107ef600183611270565b92505b5050610728565b506001600160a01b038516600090815260046020908152604080832063ffffffff9094168352929052205467ffffffffffffffff6401000000009091041691505092915050565b600080610865836040518060600160405280602581526020016113b4602591396108fc565b905061087233858361097c565b5060019392505050565b6001600160a01b03811660009081526005602052604081205463ffffffff16806108a75760006108f5565b6001600160a01b0383166000908152600460205260408120906108cb600184611270565b63ffffffff168152602081019190915260400160002054640100000000900467ffffffffffffffff165b9392505050565b6000816801000000000000000084106109285760405162461bcd60e51b8152600401610608919061112e565b509192915050565b60008367ffffffffffffffff168367ffffffffffffffff16111582906109695760405162461bcd60e51b8152600401610608919061112e565b5061097483856112c5565b949350505050565b6001600160a01b0383166109f85760405162461bcd60e51b815260206004820152603c60248201527f464845543a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f2061646472657373000000006064820152608401610608565b6001600160a01b038216610a745760405162461bcd60e51b815260206004820152603a60248201527f464845543a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f20616464726573730000000000006064820152608401610608565b6001600160a01b0383811660009081526003602052604090205416610a9d57610a9d8384610c24565b6001600160a01b0382811660009081526003602052604090205416610ac657610ac68283610c24565b6001600160a01b038316600090815260026020908152604091829020548251606081019093526036808452610b129367ffffffffffffffff909216928592919061137e90830139610930565b6001600160a01b038481166000908152600260209081526040808320805467ffffffffffffffff191667ffffffffffffffff968716179055928616825290829020548251606081019093526030808452610b7c949190911692859290919061132590830139610cc7565b6001600160a01b03838116600081815260026020908152604091829020805467ffffffffffffffff191667ffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b03808416600090815260036020526040808220548584168352912054610c1f92918216911683610d16565b505050565b6001600160a01b03808316600081815260036020818152604080842080546002845282862054949093528787167fffffffffffffffffffffffff0000000000000000000000000000000000000000841681179091559051919095169467ffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610cc1828483610d16565b50505050565b600080610cd484866112e6565b90508467ffffffffffffffff168167ffffffffffffffff1610158390610d0d5760405162461bcd60e51b8152600401610608919061112e565b50949350505050565b816001600160a01b0316836001600160a01b031614158015610d42575060008167ffffffffffffffff16115b15610c1f576001600160a01b03831615610e09576001600160a01b03831660009081526005602052604081205463ffffffff169081610d82576000610dd0565b6001600160a01b038516600090815260046020526040812090610da6600185611270565b63ffffffff168152602081019190915260400160002054640100000000900467ffffffffffffffff165b90506000610df7828560405180606001604052806028815260200161146e60289139610930565b9050610e0586848484610ecf565b5050505b6001600160a01b03821615610c1f576001600160a01b03821660009081526005602052604081205463ffffffff169081610e44576000610e92565b6001600160a01b038416600090815260046020526040812090610e68600185611270565b63ffffffff168152602081019190915260400160002054640100000000900467ffffffffffffffff165b90506000610eb9828560405180606001604052806027815260200161149660279139610cc7565b9050610ec785848484610ecf565b505050505050565b6000610ef343604051806060016040528060348152602001611416603491396110c4565b905060008463ffffffff16118015610f4d57506001600160a01b038516600090815260046020526040812063ffffffff831691610f31600188611270565b63ffffffff908116825260208201929092526040016000205416145b15610fbf576001600160a01b03851660009081526004602052604081208391610f77600188611270565b63ffffffff1681526020810191909152604001600020805467ffffffffffffffff92909216640100000000026bffffffffffffffff000000001990921691909117905561106e565b60408051808201825263ffffffff808416825267ffffffffffffffff80861660208085019182526001600160a01b038b166000908152600482528681208b8616825290915294909420925183549451909116640100000000026bffffffffffffffffffffffff1990941691161791909117905561103d846001611307565b6001600160a01b0386166000908152600560205260409020805463ffffffff191663ffffffff929092169190911790555b6040805167ffffffffffffffff8086168252841660208201526001600160a01b038716917f3750d6d938cafba8ae4c5d0e44f0df156c31654cf0596c2c7ed37933603cf04a910160405180910390a25050505050565b60008164010000000084106109285760405162461bcd60e51b8152600401610608919061112e565b6000602082840312156110fe57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108f557600080fd5b60006020808352835180602085015260005b8181101561115c57858101830151858201604001528201611140565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461119457600080fd5b919050565b600080604083850312156111ac57600080fd5b6111b58361117d565b946020939093013593505050565b6000806000606084860312156111d857600080fd5b6111e18461117d565b92506111ef6020850161117d565b9150604084013590509250925092565b60006020828403121561121157600080fd5b6108f58261117d565b6000806040838503121561122d57600080fd5b6112368361117d565b9150602083013563ffffffff8116811461124f57600080fd5b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff82811682821603908082111561128d5761128d61125a565b5092915050565b600063ffffffff808416806112b957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561128d5761128d61125a565b67ffffffffffffffff81811683821601908082111561128d5761128d61125a565b63ffffffff81811683821601908082111561128d5761128d61125a56fe464845543a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77734648453a3a7472616e7366657246726f6d3a20616d6f756e7420657863656564732036342062697473464845543a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654648453a3a7472616e736665723a20616d6f756e7420657863656564732036342062697473464845543a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365464845543a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734648453a3a617070726f76653a20616d6f756e7420657863656564732036342062697473464845543a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773464845543a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773a2646970667358221220f4580355309bc01c35954e20328882d51fecca5c5d0a732921b06c7e8987034364736f6c63430008180033000000000000000000000000bc4969861f4fc67edb61499f83b09f28188802f9