0x608060405234801561000f575f80fd5b506141ca8061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061011e575f3560e01c80635125092e116100ab578063ca2a0c5e1161006f578063ca2a0c5e146102c2578063d4d9706014610240578063e15faabe146102d5578063f0e57e3d146102e8578063ffbf9cda146102fb5761011e565b80635125092e146102745780635c6bbec8146102875780635f373217146101745780639e3736801461029a578063a1dab4eb146102ad5761011e565b80631fc2b833116100f25780631fc2b8331461020757806320cf1b681461021a578063371e4a9f1461022d57806346c0b85c1461024057806347aeb43b146102615761011e565b80627b52f1146101745780630925c92c146101a457806313d19950146101c457806319c2d90d146101e7575b5f36606082610130836004818461369d565b81019061013d9190613775565b93505050505f808280602001905181019061015891906137e6565b91509150610166828261030e565b505050915050805190602001f35b610187610182366004613812565b61053c565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b76101b236600461382d565b6105a3565b60405161019b9190613905565b6101d76101d2366004613a0e565b610ad7565b604051901515815260200161019b565b6101fa6101f5366004613a6d565b610b71565b60405161019b9190613a9f565b6101b761021536600461382d565b610cfd565b6101b761022836600461382d565b610d90565b6101b761023b36600461382d565b6110e0565b61025361024e366004613812565b611474565b60405190815260200161019b565b6101b761026f36600461382d565b611534565b6101fa610282366004613a6d565b61194e565b61025361029536600461382d565b611a78565b6101b76102a8366004613812565b61215b565b6102c06102bb366004613ab1565b612453565b005b6102536102d0366004613812565b612477565b6101fa6102e3366004613a6d565b612481565b6101876102f6366004613812565b612602565b610253610309366004613b29565b6126d4565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610352573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103769190613b53565b6040516370a0823160e01b81523360048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156103bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103e19190613b53565b90506103ee843384612744565b6040516370a0823160e01b81523360048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015610432573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104569190613b53565b90505f6104638383613b7e565b90505f8461047483620f4240613b91565b61047e9190613bbc565b61048b90620f4240613b7e565b90505f8661049c87620f4240613b91565b6104a69190613bbc565b6104b390620f4240613b7e565b9050620f42408211806104c85750620f424081115b156104ff5760405162461bcd60e51b8152602060048201526002602482015261373360f11b60448201526064015b60405180910390fd5b5f6105208261051185620f4240613b91565b61051b9190613bcf565b612865565b90508060405162461bcd60e51b81526004016104f69190613c2f565b5f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610579573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059d9190613c41565b92915050565b6105ab61363d565b5f826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060c9190613c41565b90505f836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066f9190613c41565b6040516370a0823160e01b81526001600160a01b0386811660048301529192505f918416906370a0823190602401602060405180830381865afa1580156106b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106dc9190613b53565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f918416906370a0823190602401602060405180830381865afa158015610725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107499190613b53565b90505f80876001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa158015610788573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ac9190613c77565b915091505f80876001600160a01b031663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561080c575060408051601f3d908101601f1916820190925261080991810190613b53565b60015b156108175760019250505b866001600160a01b031663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610871575060408051601f3d908101601f1916820190925261086e91810190613b53565b60015b1561087c5760019150505b5f6108878b8a612899565b90505f6108948c8a612899565b9050808210156108ba57806108aa83600a613b91565b10156108b557600192505b6108d9565b808211156108d957816108ce82600a613b91565b10156108d957600193505b506108e79050606485613ca8565b6001600160701b03165f036108fb57600191505b610906606484613ca8565b6001600160701b03165f03610919575060015b5f805f84158015610928575083155b156109725761094b8d8c61093d60648b613ca8565b6001600160701b03166128be565b90955092506109608d8b61093d60648a613ca8565b909450915061096f8e8e611a78565b90505b6040518061016001604052808e6001600160a01b031681526020016109978d8d612ac1565b81526020016109ba896001600160701b0316896001600160701b03168d8d612b4c565b81526020016109c95f80612bf9565b8152602001610a968d6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a319190613ccd565b8d6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a919190613ccd565b612c62565b8152602001828152602001620f4240815260200184815260200183815260200186151581526020018515158152509b50505050505050505050505092915050565b805182515f918491849114610af0575f9250505061059d565b5f5b8251811015610b6557818181518110610b0d57610b0d613ced565b602001015160f81c60f81b6001600160f81b031916838281518110610b3457610b34613ced565b01602001516001600160f81b03191614610b53575f935050505061059d565b80610b5d81613d01565b915050610af2565b50600195945050505050565b60605f846001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd49190613c41565b90505f610be18585613b7e565b610bec906001613bcf565b90505f816001600160401b03811115610c0757610c076136db565b604051908082528060200260200182016040528015610c30578160200160208202803683370190505b509050855b858111610cf257604051631e3dd18b60e01b8152600481018290526001600160a01b03851690631e3dd18b90602401602060405180830381865afa925050508015610c9d575060408051601f3d908101601f19168201909252610c9a91810190613c41565b60015b15610ce0578083610cae8a85613b7e565b81518110610cbe57610cbe613ced565b60200260200101906001600160a01b031690816001600160a01b031681525050505b80610cea81613d01565b915050610c35565b509695505050505050565b610d0561363d565b5f610d1084846105a3565b90505f80846001600160a01b03166332bfe4696040518163ffffffff1660e01b81526004016040805180830381865afa158015610d4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d739190613d19565b91509150610d818282612bf9565b60608401525090949350505050565b610d9861363d565b5f826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df99190613c41565b90505f836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c9190613c41565b90505f80856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610e9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec09190613d4e565b50915091505f866001600160a01b0316633705b3926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f269190613b53565b90505f876001600160a01b031662afb3256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f889190613b53565b90505f81610f9984620f4240613d8e565b610fa39190613db5565b62ffffff1690506040518061016001604052808a6001600160a01b03168152602001610fcf8989612ac1565b8152602001610ff0876001600160701b0316876001600160701b0316612bf9565b8152602001610fff5f80612bf9565b81526020016110a3896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611043573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110679190613ccd565b896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d5f803e3d5ffd5b8152602001828152602001620f424081526020015f81526020015f81526020015f151581526020015f151581525097505050505050505092915050565b6110e861363d565b5f826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611125573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111499190613c41565b90505f836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611188573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ac9190613c41565b6040516370a0823160e01b81526001600160a01b0386811660048301529192505f918416906370a0823190602401602060405180830381865afa1580156111f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112199190613b53565b6040516370a0823160e01b81526001600160a01b0387811660048301529192505f918416906370a0823190602401602060405180830381865afa158015611262573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112869190613b53565b90505f80876001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa1580156112c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e99190613c77565b915091505f80876001600160a01b031663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611349575060408051601f3d908101601f1916820190925261134691810190613b53565b60015b156113545760019250505b866001600160a01b031663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113ae575060408051601f3d908101601f191682019092526113ab91810190613b53565b60015b156113b95760019150505b5f6113c48b8a612899565b90505f6113d18c8a612899565b9050808210156113f757806113e783600a613b91565b10156113f257600192505b611416565b80821115611416578161140b82600a613b91565b101561141657600193505b506114249050606485613ca8565b6001600160701b03165f0361143857600191505b611443606484613ca8565b6001600160701b03165f03611456575060015b5f805f84158015611465575083155b156109725761096f8e8e611a78565b5f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d59190613c41565b6001600160a01b031663574f2ba36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611510573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059d9190613b53565b61153c61363d565b5f826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611579573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159d9190613c41565b90505f836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116009190613c41565b90505f80856001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa15801561163f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116639190613c77565b915091505f846001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c89190613c41565b90505f846001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611707573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172b9190613c41565b6040516370a0823160e01b81526001600160a01b0388811660048301529192505f918416906370a0823190602401602060405180830381865afa158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613b53565b6040516370a0823160e01b81526001600160a01b0388811660048301529192505f918416906370a0823190602401602060405180830381865afa1580156117e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118059190613b53565b90505f6118128c8c611a78565b90506040518061016001604052808c6001600160a01b031681526020016118398787612ac1565b815260200161185c896001600160701b0316896001600160701b03168787612b4c565b815260200161186b5f80612bf9565b815260200161190f876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118d39190613ccd565b876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d5f803e3d5ffd5b8152602001828152602001620f424081526020015f81526020015f81526020015f151581526020015f1515815250995050505050505050505092915050565b60605f61195a85612602565b90505f6119678585613b7e565b611972906001613bcf565b90505f816001600160401b0381111561198d5761198d6136db565b6040519080825280602002602001820160405280156119b6578160200160208202803683370190505b509050855b858111610cf257604051631e3dd18b60e01b8152600481018290526001600160a01b03851690631e3dd18b90602401602060405180830381865afa925050508015611a23575060408051601f3d908101601f19168201909252611a2091810190613c41565b60015b15611a66578083611a348a85613b7e565b81518110611a4457611a44613ced565b60200260200101906001600160a01b031690816001600160a01b031681525050505b80611a7081613d01565b9150506119bb565b5f6001600160a01b03831615611ee0575f826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae99190613c41565b90505f836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613c41565b90505f80856001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004016040805180830381865afa925050508015611ba9575060408051601f3d908101601f19168201909252611ba691810190613c77565b60015b15611bbf576001600160701b0391821693501690505b856001600160a01b031663976bf4166040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015611c19575060408051601f3d908101601f19168201909252611c1691810190613dd8565b60015b15611c325750506001600160701b039283169450501690505b811580611c3d575080155b15611c735760405162461bcd60e51b81526004016104f6906020808252600490820152637265732160e01b604082015260600190565b5f611c806103e884613bbc565b90505f611c938484845f620f4240612cdb565b9050886001600160a01b031663d06ca61f83611caf8989612ac1565b6040518363ffffffff1660e01b8152600401611ccc929190613e39565b5f60405180830381865afa925050508015611d0857506040513d5f823e601f3d908101601f19168201604052611d059190810190613e59565b60015b15611d4757611d348282600181518110611d2457611d24613ced565b6020026020010151878787612d2f565b62ffffff1697505050505050505061059d565b886001600160a01b03166312a1c5f183611d618989612ac1565b5f6040518463ffffffff1660e01b8152600401611d8093929190613efa565b5f60405180830381865afa925050508015611dbc57506040513d5f823e601f3d908101601f19168201604052611db99190810190613e59565b60015b15611dd857611d348282600181518110611d2457611d24613ced565b604051630153543560e21b81526004810183905260248101859052604481018490526001600160a01b038a169063054d50d490606401602060405180830381865afa925050508015611e47575060408051601f3d908101601f19168201909252611e4491810190613b53565b60015b15611e5957611d348282878787612d2f565b611e6289612602565b604051634c2fc06f60e01b81526001600160a01b038a811660048301529190911690634c2fc06f90602401602060405180830381865afa925050508015611ec6575060408051601f3d908101601f19168201909252611ec391810190613b53565b60015b15611ed957965061059d95505050505050565b5050505050505b816001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f3a575060408051601f3d908101601f19168201909252611f3791810190613b53565b60015b15611f4657905061059d565b816001600160a01b0316632a3240276040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611fa0575060408051601f3d908101601f19168201909252611f9d91810190613b53565b60015b15611fac57905061059d565b816001600160a01b03166354cf2aeb6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612006575060408051601f3d908101601f1916820190925261200391810190613b53565b60015b1561201257905061059d565b816001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561206c575060408051601f3d908101601f1916820190925261206991810190613b53565b60015b1561207857905061059d565b816001600160a01b0316636827e7646040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156120d2575060408051601f3d908101601f191682019092526120cf91810190613b53565b60015b156120de57905061059d565b816001600160a01b031663d4cadf686040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612138575060408051601f3d908101601f1916820190925261213591810190613b53565b60015b1561215057612148816064613b91565b91505061059d565b50620f424092915050565b61216361363d565b5f826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c49190613c41565b90505f836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612203573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122279190613c41565b90505f80856001600160a01b031663db8d55f16040518163ffffffff1660e01b81526004016040805180830381865afa925050508015612284575060408051601f3d908101601f1916820190925261228191810190613f3a565b60015b1561228f5790925090505b856001600160a01b0316623b15fd6040518163ffffffff1660e01b81526004016040805180830381865afa9250505080156122e7575060408051601f3d908101601f191682019092526122e491810190613f3a565b60015b156122f25790925090505b5f6122fd8284613f62565b90505f80886001600160a01b0316639a20767b6040518163ffffffff1660e01b81526004016040805180830381865afa15801561233c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123609190613d19565b915091505f806123728b600186612da2565b915091505f806123838d5f87612da2565b915091506040518061016001604052808e6001600160a01b031681526020016123ac8d8d612ac1565b81526020016123bb8888612bf9565b81526020016123ca5f80612bf9565b815260200161240e8d6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a0d573d5f803e3d5ffd5b81526020018862ffffff168152602001620f4240815260200184815260200182815260200185151581526020018315158152509b505050505050505050505050919050565b5f8061246183850185613b29565b9150915061246f828261030e565b505050505050565b5f6114d582612602565b60605f846001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e49190613c41565b90505f6124f18585613b7e565b6124fc906001613bcf565b90505f816001600160401b03811115612517576125176136db565b604051908082528060200260200182016040528015612540578160200160208202803683370190505b509050855b858111610cf257604051631e3dd18b60e01b8152600481018290526001600160a01b03851690631e3dd18b90602401602060405180830381865afa9250505080156125ad575060408051601f3d908101601f191682019092526125aa91810190613c41565b60015b156125f05780836125be8a85613b7e565b815181106125ce576125ce613ced565b60200260200101906001600160a01b031690816001600160a01b031681525050505b806125fa81613d01565b915050612545565b5f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561265d575060408051601f3d908101601f1916820190925261265a91810190613c41565b60015b156126685792915050565b816001600160a01b0316632dd310006040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126c2575060408051601f3d908101601f191682019092526126bf91810190613c41565b60015b156126cd5792915050565b505f919050565b604051630590205360e41b8152600481018290525f906001600160a01b03841690635902053090602401602060405180830381865afa158015612719573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061273d9190613b53565b9392505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161279f9190613f82565b5f604051808303815f865af19150503d805f81146127d8576040519150601f19603f3d011682016040523d82523d5f602084013e6127dd565b606091505b50915091508180156128075750805115806128075750808060200190518101906128079190613f9d565b61285e5760405162461bcd60e51b815260206004820152602260248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45445f6044820152616d6560f01b60648201526084016104f6565b5050505050565b60605f61287183612fd1565b905061273d604051806040016040528060048152602001636665652d60e01b815250826130e2565b5f805a90506128a983855f612744565b5f5a6128b59083613b7e565b95945050505050565b5f80806128cc600a85613bbc565b9050805f036128e1575f809250925050612ab9565b5f866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561291e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129429190613c41565b604080516001600160a01b03891660208201529081018490529091505f9060600160405160208183030381529060405290505f80886001600160a01b0316846001600160a01b031614612996575f85612999565b845f5b60405163022c0d9f60e01b815291935091506001600160a01b038b169063022c0d9f906129d0908590859030908990600401613fbc565b5f604051808303815f87803b1580156129e7575f80fd5b505af19250505080156129f8575060015b612aac57612a04613fe8565b806308c379a003612aaa5750612a18614001565b80612a235750612aac565b612a48816040518060400160405280600381526020016266656560e81b81525061322f565b15612aaa575f612a7182604051806040016040528060018152602001602d60f81b8152506132f1565b90505f612a9782600181518110612a8a57612a8a613ced565b60200260200101516134e8565b5f9a509850612ab9975050505050505050565b505b60015f9650965050505050505b935093915050565b60408051600280825260608083018452925f92919060208301908036833701905050905083815f81518110612af857612af8613ced565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612b2c57612b2c613ced565b6001600160a01b0390921660209283029190910190910152905092915050565b60408051600480825260a082019092526060915f91906020820160808036833701905050905085815f81518110612b8557612b85613ced565b6020026020010181815250508481600181518110612ba557612ba5613ced565b6020026020010181815250508381600281518110612bc557612bc5613ced565b6020026020010181815250508281600381518110612be557612be5613ced565b602090810291909101015295945050505050565b60408051600280825260608083018452925f92919060208301908036833701905050905083815f81518110612c3057612c30613ced565b6020026020010181815250508281600181518110612c5057612c50613ced565b60209081029190910101529392505050565b60408051600280825260608083018452925f92919060208301908036833701905050905083815f81518110612c9957612c99613ced565b602002602001019060ff16908160ff16815250508281600181518110612cc157612cc1613ced565b60ff90921660209283029190910190910152905092915050565b5f612ce68383613b7e565b9250612cf28385613b91565b612cfc8388613b91565b612d069190613bcf565b83612d118787613b91565b612d1b9190613b91565b612d259190613bbc565b9695505050505050565b5f80612d3b8587613b91565b612d4890620f4240613b91565b90505f612d558488613b91565b612d5f858a613b91565b612d69888b613b91565b612d739190613bcf565b612d7d9190613b7e565b9050612d898183613bbc565b612d9690620f4240613b7e565b98975050505050505050565b5f8080612db0600a85613bbc565b9050805f03612dc5575f809250925050612ab9565b5f8515612e3357866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e2c9190613c41565b9050612e96565b866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e939190613c41565b90505b604080516001600160a01b0383811660208301528183018590528251808303840181526060909201909252908816631f18b3713089612ed487614089565b856040518563ffffffff1660e01b8152600401612ef494939291906140a3565b5f604051808303815f87803b158015612f0b575f80fd5b505af1925050508015612f1c575060015b612fc157612f28613fe8565b806308c379a003612fbf5750612f3c614001565b80612f475750612fc1565b612f6c816040518060400160405280600381526020016266656560e81b81525061322f565b15612fbf575f612f9582604051806040016040528060018152602001602d60f81b8152506132f1565b90505f612fae82600181518110612a8a57612a8a613ced565b5f98509650612ab995505050505050565b505b506001975f975095505050505050565b6060815f03612ff75750506040805180820190915260018152600360fc1b602082015290565b815f5b8115613020578061300a81613d01565b91506130199050600a83613bbc565b9150612ffa565b5f816001600160401b03811115613039576130396136db565b6040519080825280601f01601f191660200182016040528015613063576020820181803683370190505b5090505f613072600184613b7e565b90505b85156130d957613086600a876140d1565b613091906030613bcf565b60f81b828261309f816140e4565b9350815181106130b1576130b1613ced565b60200101906001600160f81b03191690815f1a9053506130d2600a87613bbc565b9550613075565b50949350505050565b80518251606091849184915f916130f99190613bcf565b6001600160401b03811115613110576131106136db565b6040519080825280601f01601f19166020018201604052801561313a576020820181803683370190505b509050805f805b85518110156131b05785818151811061315c5761315c613ced565b01602001516001600160f81b031916838361317681613d01565b94508151811061318857613188613ced565b60200101906001600160f81b03191690815f1a905350806131a881613d01565b915050613141565b505f5b8451811015613222578481815181106131ce576131ce613ced565b01602001516001600160f81b03191683836131e881613d01565b9450815181106131fa576131fa613ced565b60200101906001600160f81b03191690815f1a9053508061321a81613d01565b9150506131b3565b5090979650505050505050565b5f8282825b815183516132429190613b7e565b81116132e65760015f5b83518110156132bf5783818151811061326757613267613ced565b01602001516001600160f81b031916856132818386613bcf565b8151811061329157613291613ced565b01602001516001600160f81b031916146132ad575f91506132bf565b806132b781613d01565b91505061324c565b5080156132d357600194505050505061059d565b50806132de81613d01565b915050613234565b505f95945050505050565b6060828260015f5b835181101561336f57825f8151811061331457613314613ced565b602001015160f81c60f81b6001600160f81b03191684828151811061333b5761333b613ced565b01602001516001600160f81b0319160361335d578161335981613d01565b9250505b8061336781613d01565b9150506132f9565b505f816001600160401b03811115613389576133896136db565b6040519080825280602002602001820160405280156133bc57816020015b60608152602001906001900390816133a75790505b5060408051602081019091525f808252919250815b86518110156134bc57855f815181106133ec576133ec613ced565b602001015160f81c60f81b6001600160f81b03191687828151811061341357613413613ced565b01602001516001600160f81b03191603613469578184848151811061343a5761343a613ced565b602002602001018190525060405180602001604052805f8152509150828061346190613d01565b9350506134aa565b8187828151811061347c5761347c613ced565b602001015160f81c60f81b6040516020016134989291906140f9565b60405160208183030381529060405291505b806134b481613d01565b9150506133d1565b50808383815181106134d0576134d0613ced565b60209081029190910101525090979650505050505050565b5f808290505f805f80845111801561352d5750602d60f81b6001600160f81b031916845f8151811061351c5761351c613ced565b01602001516001600160f81b031916145b15613539575060019050805b835181101561362157603084828151811061355657613556613ced565b016020015160f81c108015906135865750603984828151811061357b5761357b613ced565b016020015160f81c11155b6135d25760405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642063686172616374657220696e20737472696e67000000000060448201526064016104f6565b6135dd83600a614127565b60308583815181106135f1576135f1613ced565b0160200151613603919060f81c614156565b61360d9190614175565b92508061361981613d01565b915050613539565b81156136335761363083614089565b92505b5090949350505050565b6040518061016001604052805f6001600160a01b03168152602001606081526020016060815260200160608152602001606081526020015f81526020015f81526020015f81526020015f81526020015f151581526020015f151581525090565b5f80858511156136ab575f80fd5b838611156136b7575f80fd5b5050820193919092039150565b6001600160a01b03811681146136d8575f80fd5b50565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b0381118282101715613714576137146136db565b6040525050565b5f6001600160401b03831115613733576137336136db565b60405161374a601f8501601f1916602001826136ef565b80915083815284848401111561375e575f80fd5b838360208301375f60208583010152509392505050565b5f805f8060808587031215613788575f80fd5b8435613793816136c4565b9350602085013592506040850135915060608501356001600160401b038111156137bb575f80fd5b8501601f810187136137cb575f80fd5b6137da8782356020840161371b565b91505092959194509250565b5f80604083850312156137f7575f80fd5b8251613802816136c4565b6020939093015192949293505050565b5f60208284031215613822575f80fd5b813561273d816136c4565b5f806040838503121561383e575f80fd5b8235613849816136c4565b91506020830135613859816136c4565b809150509250929050565b5f8151808452602080850194508084015f5b8381101561389b5781516001600160a01b031687529582019590820190600101613876565b509495945050505050565b5f8151808452602080850194508084015f5b8381101561389b578151875295820195908201906001016138b8565b5f8151808452602080850194508084015f5b8381101561389b57815160ff16875295820195908201906001016138e6565b6020815261391f6020820183516001600160a01b03169052565b5f602083015161016080604085015261393c610180850183613864565b91506040850151601f198086850301606087015261395a84836138a6565b9350606087015191508086850301608087015261397784836138a6565b935060808701519150808685030160a08701525061399583826138d4565b92505060a085015160c085015260c085015160e085015260e08501516101008181870152808701519150506101208181870152808701519150506101406139df8187018315159052565b860151801515838701529050613633565b5f82601f8301126139ff575f80fd5b61273d8383356020850161371b565b5f8060408385031215613a1f575f80fd5b82356001600160401b0380821115613a35575f80fd5b613a41868387016139f0565b93506020850135915080821115613a56575f80fd5b50613a63858286016139f0565b9150509250929050565b5f805f60608486031215613a7f575f80fd5b8335613a8a816136c4565b95602085013595506040909401359392505050565b602081525f61273d6020830184613864565b5f805f8060608587031215613ac4575f80fd5b843593506020850135925060408501356001600160401b0380821115613ae8575f80fd5b818701915087601f830112613afb575f80fd5b813581811115613b09575f80fd5b886020828501011115613b1a575f80fd5b95989497505060200194505050565b5f8060408385031215613b3a575f80fd5b8235613b45816136c4565b946020939093013593505050565b5f60208284031215613b63575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561059d5761059d613b6a565b808202811582820484141761059d5761059d613b6a565b634e487b7160e01b5f52601260045260245ffd5b5f82613bca57613bca613ba8565b500490565b8082018082111561059d5761059d613b6a565b5f5b83811015613bfc578181015183820152602001613be4565b50505f910152565b5f8151808452613c1b816020860160208601613be2565b601f01601f19169290920160200192915050565b602081525f61273d6020830184613c04565b5f60208284031215613c51575f80fd5b815161273d816136c4565b80516001600160701b0381168114613c72575f80fd5b919050565b5f8060408385031215613c88575f80fd5b613c9183613c5c565b9150613c9f60208401613c5c565b90509250929050565b5f6001600160701b0380841680613cc157613cc1613ba8565b92169190910492915050565b5f60208284031215613cdd575f80fd5b815160ff8116811461273d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60018201613d1257613d12613b6a565b5060010190565b5f8060408385031215613d2a575f80fd5b505080516020909101519092909150565b805163ffffffff81168114613c72575f80fd5b5f805f60608486031215613d60575f80fd5b613d6984613c5c565b9250613d7760208501613c5c565b9150613d8560408501613d3b565b90509250925092565b62ffffff818116838216028082169190828114613dad57613dad613b6a565b505092915050565b62ffffff818116838216019080821115613dd157613dd1613b6a565b5092915050565b5f805f805f60a08688031215613dec575f80fd5b613df586613c5c565b9450613e0360208701613c5c565b9350613e1160408701613c5c565b9250613e1f60608701613c5c565b9150613e2d60808701613d3b565b90509295509295909350565b828152604060208201525f613e516040830184613864565b949350505050565b5f6020808385031215613e6a575f80fd5b82516001600160401b0380821115613e80575f80fd5b818501915085601f830112613e93575f80fd5b815181811115613ea557613ea56136db565b8060051b9150604051613eba858401826136ef565b81815291830184019184810188841115613ed2575f80fd5b938501935b83851015613eee5784518152938501938501613ed7565b50979650505050505050565b838152606060208201525f613f126060830185613864565b90508215156040830152949350505050565b80516001600160801b0381168114613c72575f80fd5b5f8060408385031215613f4b575f80fd5b613f5483613f24565b9150613c9f60208401613f24565b6001600160801b03818116838216019080821115613dd157613dd1613b6a565b5f8251613f93818460208701613be2565b9190910192915050565b5f60208284031215613fad575f80fd5b8151801515811461273d575f80fd5b84815283602082015260018060a01b0383166040820152608060608201525f612d256080830184613c04565b5f60033d1115613ffe5760045f803e505f5160e01c5b90565b5f60443d101561400e5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561403d57505050505090565b82850191508151818111156140555750505050505090565b843d870101602082850101111561406f5750505050505090565b61407e602082860101876136ef565b509095945050505050565b5f600160ff1b820161409d5761409d613b6a565b505f0390565b60018060a01b03851681528315156020820152826040820152608060608201525f612d256080830184613c04565b5f826140df576140df613ba8565b500690565b5f816140f2576140f2613b6a565b505f190190565b5f835161410a818460208801613be2565b6001600160f81b0319939093169190920190815260010192915050565b8082025f8212600160ff1b8414161561414257614142613b6a565b818105831482151761059d5761059d613b6a565b8181035f831280158383131683831282161715613dd157613dd1613b6a565b8082018281125f831280158216821582161715613dad57613dad613b6a56fea26469706673582212209f467eabddc56e447cbe0600a29014f1f07784fa2f07a8e792d719903d50a4b964736f6c63430008140033