[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": false, "internalType": "address", "name": "asset", "type": "address" } ], "name": "AssetAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": false, "internalType": "address", "name": "asset", "type": "address" } ], "name": "AssetRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalRaisedInUsd", "type": "uint256" } ], "name": "Canceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": true, "internalType": "address", "name": "investor", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shareAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "usdToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "usdAmount", "type": "uint256" } ], "name": "Claimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": true, "internalType": "address", "name": "investor", "type": "address" }, { "indexed": false, "internalType": "address", "name": "usdToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "usdAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "transactionType", "type": "uint16" } ], "name": "Executed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalRaisedInUsd", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "fundraisingDeadline", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lockingDeadline", "type": "uint256" } ], "name": "FundraisingClosed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": false, "internalType": "string", "name": "platform", "type": "string" } ], "name": "PlatformAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pot", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "sharePrice", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "investor", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shareAmount", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "protocolExitFee", "type": "uint256" }, { "internalType": "uint256", "name": "managerExitFee", "type": "uint256" }, { "internalType": "uint256", "name": "performanceFee", "type": "uint256" } ], "indexed": false, "internalType": "struct Pot.WithdrawnAsset[]", "name": "withdrawnAssets", "type": "tuple[]" } ], "name": "Withdrawn", "type": "event" }, { "inputs": [ { "internalType": "string[]", "name": "_platforms", "type": "string[]" } ], "name": "addPlatforms", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" } ], "name": "assetBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "assetPosition", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelFundraising", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_addAssets", "type": "address[]" }, { "internalType": "address[]", "name": "_removeAssets", "type": "address[]" } ], "name": "changeAssets", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shareAmount", "type": "uint256" } ], "name": "claim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "closeFundraising", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_usdAmount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "execute", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fundraisingDeadline", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAssetComposition", "outputs": [ { "internalType": "address[]", "name": "assets", "type": "address[]" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFundComposition", "outputs": [ { "internalType": "address[]", "name": "assets", "type": "address[]" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "uint256", "name": "totalValue", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPerformanceFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPriceInUsd", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSupportedAssets", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_usdToken", "type": "address" }, { "internalType": "address", "name": "_manager", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "fundraisingDeadline", "type": "uint256" }, { "internalType": "uint256", "name": "lockingDeadline", "type": "uint256" }, { "internalType": "uint256", "name": "maxCapacity", "type": "uint256" }, { "internalType": "uint256", "name": "performanceFee", "type": "uint256" } ], "internalType": "struct IPotFactory.InitInfo", "name": "_info", "type": "tuple" }, { "internalType": "string[]", "name": "_platforms", "type": "string[]" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" } ], "name": "isSupportedAsset", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_platform", "type": "string" } ], "name": "isSupportedPlatform", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockingDeadline", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "manager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxCapacity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "platforms", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shareAmount", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "components": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "protocolExitFee", "type": "uint256" }, { "internalType": "uint256", "name": "managerExitFee", "type": "uint256" }, { "internalType": "uint256", "name": "performanceFee", "type": "uint256" } ], "internalType": "struct Pot.WithdrawnAsset[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "supportedAssets", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalRaisedInUsd", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalValueInUsd", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "usdToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shareAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_minSharePrice", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50614eb9806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e85760003560e01c8063838a60591161010b578063838a60591461036d57806395d89b411461037557806398d5d4141461037d5780639be918e614610385578063a457c2d714610398578063a9059cbb146103ab578063b69ca799146103be578063b6b55f25146103d1578063bcac4b9d146103e4578063c45a0155146103f7578063c68dbb37146103ff578063cd88e55814610412578063d5bcc54b14610425578063d5d6984f1461043b578063dd62ed3e14610443578063e2879a1014610456578063e5406dbf1461045e578063f09d14d714610473578063f897a22b1461048b578063faa992d314610493576101e8565b806303b69def146101ed57806306a9d1a91461020b57806306fdde0314610213578063095ea7b3146102285780630a28a4771461024857806318160ddd146102685780631cff79cd14610270578063235c36031461028357806323b872dd1461029957806328906e59146102ac5780633047a6d1146102b4578063313ce567146102c9578063379607f5146102de57806339509351146102f15780633c570d7d14610304578063441a3e7014610317578063481c6a751461032a57806359b6a0c91461033f5780636368e8d11461034757806370a082311461035a575b600080fd5b6101f56104a6565b6040516102029190614baa565b60405180910390f35b6101f56104ac565b61021b6104b2565b60405161020291906146c8565b61023b61023636600461404e565b610548565b60405161020291906146a1565b61025b6102563660046142f3565b610566565b604051610202919061468e565b6101f56109c7565b61023b61027e366004613f6f565b6109cd565b61028b610dbc565b604051610202929190614bd2565b61023b6102a7366004613f2f565b610dcd565b6101f5610e54565b6102c76102c23660046140e1565b610e5a565b005b6102d1610e92565b6040516102029190614c1a565b6102c76102ec3660046142f3565b610e9b565b61023b6102ff36600461404e565b6111cb565b6101f5610312366004613ebf565b611219565b6102c7610325366004614323565b61122b565b6103326119f7565b6040516102029190614522565b6101f5611a06565b6102c7610355366004614140565b611a0c565b6101f5610368366004613ebf565b611c11565b6101f5611c2c565b61021b611c4b565b6101f5611cac565b61023b610393366004613ebf565b611e82565b61023b6103a636600461404e565b611eba565b61023b6103b936600461404e565b611f22565b61023b6103cc36600461425e565b611f36565b6102c76103df3660046142f3565b611fcf565b6102c76103f2366004614079565b612394565b610332612402565b61033261040d3660046142f3565b612411565b6101f5610420366004613ebf565b61243b565b61042d6124ba565b604051610202929190614615565b6102c761271a565b6101f5610451366004613ef7565b612857565b6102c7612882565b6104666129d5565b6040516102029190614602565b61047b612a36565b6040516102029493929190614643565b610332612e4d565b61021b6104a13660046142f3565b612e5c565b609c5481565b609b5481565b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561053e5780601f106105135761010080835404028352916020019161053e565b820191906000526020600020905b81548152906001019060200180831161052157829003601f168201915b5050505050905090565b600061055c610555612f05565b8484612f09565b5060015b92915050565b606060018210156105925760405162461bcd60e51b8152600401610589906149ab565b60405180910390fd5b609b5415806105a35750609b544211155b156105c05760405162461bcd60e51b815260040161058990614ac3565b609c5442116105e15760405162461bcd60e51b815260040161058990614af8565b816105eb33611c11565b10156106095760405162461bcd60e51b815260040161058990614754565b609954609a5460405163117a698160e31b81526001600160a01b0392831692638bd34c089261064092339290911690600401614536565b60206040518083038186803b15801561065857600080fd5b505afa15801561066c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610690919061430b565b6106ac5760405162461bcd60e51b8152600401610589906147a6565b6000806000808060006106bd612a36565b9350509250925060006106ce6109c7565b90508089670de0b6b3a764000002816106e357fe5b0495506106f08183612ff5565b965060985487111561071757866098548803670de0b6b3a7640000028161071357fe5b0494505b5082516000600182016001600160401b038111801561073557600080fd5b5060405190808252806020026020018201604052801561076f57816020015b61075c613ce3565b8152602001906001900390816107545790505b5090506000805b838110156109a057600086828151811061078c57fe5b60200260200101511115610998576000670de0b6b3a76400008a8884815181106107b257fe5b602002602001015102816107c257fe5b04905080156109965760008915610806576000806107de610dbc565b915091508082670de0b6b3a76400008e8702816107f757fe5b04028161080057fe5b04925050505b609954604080516316ef264d60e11b815281516001600160a01b039093169260009283928592632dde4c9a92600480840193919291829003018186803b15801561084f57600080fd5b505afa158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190614344565b915091506000818387028161089857fe5b049050600080856001600160a01b031663198b88376040518163ffffffff1660e01b8152600401604080518083038186803b1580156108d657600080fd5b505afa1580156108ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090e9190614344565b91509150600081838a028161091f57fe5b0490508084898b03030398506040518060a00160405280609760009054906101000a90046001600160a01b03166001600160a01b031681526020018a8152602001858152602001828152602001898152508c8c8151811061097c57fe5b602090810291909101015250506001909801975050505050505b505b600101610776565b5060006109b06001850183613025565b83510383525090985050505050505050505b919050565b60355490565b609a546000906001600160a01b031633146109fa5760405162461bcd60e51b81526004016105899061487e565b60026065541415610a52576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002606555609954604080516358c3de9360e11b815290516001600160a01b039092169163b187bd2691600480820192602092909190829003018186803b158015610a9c57600080fd5b505afa158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190614120565b15610af15760405162461bcd60e51b815260040161058990614b2e565b609b544211610b125760405162461bcd60e51b815260040161058990614a63565b6001600160a01b038416610b385760405162461bcd60e51b815260040161058990614a3e565b609954604051631c09fa9b60e21b815260009182916001600160a01b0390911690637027ea6c90610b6d908990600401614522565b60006040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bc19190810190613fc1565b90925090506001600160a01b038216610bec5760405162461bcd60e51b815260040161058990614924565b8051610c1c57610bfb86611e82565b610c175760405162461bcd60e51b8152600401610589906147d1565b610c41565b610c2581611f36565b610c415760405162461bcd60e51b8152600401610589906148cb565b604051636179309d60e01b81526000906001600160a01b03841690636179309d90610c769030908b908b908b906004016145aa565b602060405180830381600087803b158015610c9057600080fd5b505af1158015610ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc891906142d1565b905061ffff8116610ceb5760405162461bcd60e51b815260040161058990614b58565b866001600160a01b03168686604051610d05929190614486565b6000604051808303816000865af19150503d8060008114610d42576040519150601f19603f3d011682016040523d82523d6000602084013e610d47565b606091505b50508094505083610d6a5760405162461bcd60e51b81526004016105899061477b565b306001600160a01b03167f2999d6c8c880d6ebdcefb3efd59a283d5fda0cfdb4e831a11543a34eeecbbac53383604051610da5929190614574565b60405180910390a250506001606555509392505050565b609f5468056bc75e2d631000009091565b6000610dda848484613082565b610e4a84610de6612f05565b610e4585604051806060016040528060288152602001614dad602891396001600160a01b038a16600090815260346020526040812090610e24612f05565b6001600160a01b0316815260208101919091526040016000205491906131cd565b612f09565b5060019392505050565b609e5481565b609a546001600160a01b03163314610e845760405162461bcd60e51b81526004016105899061487e565b610e8e8282613264565b5050565b60385460ff1690565b609960009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b158015610ee957600080fd5b505afa158015610efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f219190614120565b15610f3e5760405162461bcd60e51b815260040161058990614b2e565b6001811015610f5f5760405162461bcd60e51b8152600401610589906149ab565b6000609b54118015610f725750609b5442115b15610f8f5760405162461bcd60e51b815260040161058990614808565b3081610f9a33611c11565b1015610fb85760405162461bcd60e51b815260040161058990614981565b610fc233836132a8565b6097546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b15801561100757600080fd5b505afa15801561101b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103f9190614367565b60120360ff16600a0a838161105057fe5b6097546040516370a0823160e01b81529290910492506001600160a01b031690829082906370a0823190611088908790600401614522565b60206040518083038186803b1580156110a057600080fd5b505afa1580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d8919061430b565b10156110f65760405162461bcd60e51b815260040161058990614754565b60405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb906111249033908690600401614591565b602060405180830381600087803b15801561113e57600080fd5b505af1158015611152573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111769190614120565b5060975460405133916001600160a01b03868116927f240ce5314564d91727709af90e37c14263bd65a1657bf6504f39bc491a4bd9fc926111bd928a929116908890614bb3565b60405180910390a350505050565b600061055c6111d8612f05565b84610e4585603460006111e9612f05565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613392565b60a16020526000908152604090205481565b60026065541415611283576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002606555609954604080516358c3de9360e11b815290516001600160a01b039092169163b187bd2691600480820192602092909190829003018186803b1580156112cd57600080fd5b505afa1580156112e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113059190614120565b156113225760405162461bcd60e51b815260040161058990614b2e565b60018210156113435760405162461bcd60e51b8152600401610589906149ab565b609b5415806113545750609b544211155b156113715760405162461bcd60e51b815260040161058990614ac3565b609c5442116113925760405162461bcd60e51b815260040161058990614af8565b8161139c33611c11565b10156113ba5760405162461bcd60e51b815260040161058990614754565b609954609a5460405163117a698160e31b81526001600160a01b0392831692638bd34c08926113f192339290911690600401614536565b60206040518083038186803b15801561140957600080fd5b505afa15801561141d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611441919061430b565b61145d5760405162461bcd60e51b8152600401610589906147a6565b60008060008080600061146e612a36565b93505092509250600061147f6109c7565b90508089670de0b6b3a7640000028161149457fe5b0495506114a18183612ff5565b9650878710156114c35760405162461bcd60e51b815260040161058990614b84565b6098548711156114e857866098548803670de0b6b3a764000002816114e457fe5b0494505b506114f333896132a8565b600083516001600160401b038111801561150c57600080fd5b5060405190808252806020026020018201604052801561154657816020015b611533613ce3565b81526020019060019003908161152b5790505b5090506000805b855181101561197a576000670de0b6b3a76400008987848151811061156e57fe5b6020026020010151028161157e57fe5b049050801561197157600088156115c25760008061159a610dbc565b915091508082670de0b6b3a76400008d8702816115b357fe5b0402816115bc57fe5b04925050505b609954604080516316ef264d60e11b815281516001600160a01b039093169260009283928592632dde4c9a92600480840193919291829003018186803b15801561160b57600080fd5b505afa15801561161f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116439190614344565b915091506000818387028161165457fe5b049050600080856001600160a01b031663198b88376040518163ffffffff1660e01b8152600401604080518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190614344565b91509150600081838a02816116db57fe5b0490508084898b030303985060008f8b815181106116f557fe5b602090810291909101015190508085156117fb57806001600160a01b031663a9059cbb8a6001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561175157600080fd5b505afa158015611765573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117899190613edb565b886040518363ffffffff1660e01b81526004016117a7929190614591565b602060405180830381600087803b1580156117c157600080fd5b505af11580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190614120565b505b8983011561188d57609a5460405163a9059cbb60e01b81526001600160a01b038381169263a9059cbb926118399290911690878f0190600401614591565b602060405180830381600087803b15801561185357600080fd5b505af1158015611867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188b9190614120565b505b8a156119155760405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb906118c19033908f90600401614591565b602060405180830381600087803b1580156118db57600080fd5b505af11580156118ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119139190614120565b505b6040518060a00160405280836001600160a01b031681526020018c81526020018781526020018481526020018b8152508e8e61ffff168151811061195557fe5b602090810291909101015250506001909a019950505050505050505b5060010161154d565b50845160009061198e9061ffff8416613025565b9050808351038352336001600160a01b0316306001600160a01b03167f7facc12ed1c960c4d725c37326b7622ba7e8852a78f4f81b498eadffbef33d4d8b8e876040516119dd93929190614be0565b60405180910390a350506001606555505050505050505050565b609a546001600160a01b031681565b609d5481565b600054610100900460ff1680611a255750611a256133f1565b80611a33575060005460ff16155b611a6e5760405162461bcd60e51b815260040180806020018281038252602e815260200180614d7f602e913960400191505060405180910390fd5b600054610100900460ff16158015611a99576000805460ff1961ff0019909116610100171660011790555b611b0c8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525061340292505050565b611b146134b7565b60998054336001600160a01b031991821617909155609a805482166001600160a01b03888116919091179091556097805490921688821617918290556040805163313ce56760e01b81529051929091169163313ce56791600480820192602092909190829003018186803b158015611b8b57600080fd5b505afa158015611b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc39190614367565b60ff16600a0a6098558351609b556020840151609c556040840151609d556060840151609f55611bf38383613264565b8015611c05576000805461ff00191690555b50505050505050505050565b6001600160a01b031660009081526033602052604090205490565b6000611c46611c396109c7565b611c41611cac565b612ff5565b905090565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561053e5780601f106105135761010080835404028352916020019161053e565b6099546097546040516370a0823160e01b815260009230926001600160a01b0391821692911690849082906370a0823190611ceb908790600401614522565b60206040518083038186803b158015611d0357600080fd5b505afa158015611d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3b919061430b565b905060005b60a054811015611e7957600060a08281548110611d5957fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190611d94908a90600401614522565b60206040518083038186803b158015611dac57600080fd5b505afa158015611dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de4919061430b565b90508015611e6f57604051632b1be0d560e11b81526001600160a01b03871690635637c1aa90611e1a9085908590600401614591565b60206040518083038186803b158015611e3257600080fd5b505afa158015611e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6a919061430b565b840193505b5050600101611d40565b50935050505090565b6097546000906001600160a01b03838116911614806105605750506001600160a01b0316600090815260a16020526040902054151590565b600061055c611ec7612f05565b84610e4585604051806060016040528060258152602001614e5f6025913960346000611ef1612f05565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906131cd565b600061055c611f2f612f05565b8484613082565b6000805b60a25460ff82161015611fc65782604051602001611f589190614496565b6040516020818303038152906040528051906020012060a28260ff1681548110611f7e57fe5b90600052602060002001604051602001611f9891906144b2565b604051602081830303815290604052805190602001201415611fbe5760019150506109c2565b600101611f3a565b50600092915050565b609960009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b15801561201d57600080fd5b505afa158015612031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120559190614120565b156120725760405162461bcd60e51b815260040161058990614b2e565b60018110156120935760405162461bcd60e51b815260040161058990614837565b609b544211156120b55760405162461bcd60e51b8152600401610589906149cf565b609954609a5460405163117a698160e31b81526001600160a01b0392831692638bd34c08926120ec92339290911690600401614536565b60206040518083038186803b15801561210457600080fd5b505afa158015612118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213c919061430b565b6121585760405162461bcd60e51b8152600401610589906147a6565b60995460408051634d298a0760e01b815290516001600160a01b03909216918291634d298a07916004808301926020929190829003018186803b15801561219e57600080fd5b505afa1580156121b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d6919061430b565b8210156121f55760405162461bcd60e51b815260040161058990614a8e565b609d5482609e5401111561221b5760405162461bcd60e51b815260040161058990614a12565b6097546040516323b872dd60e01b815230916001600160a01b03169081906323b872dd9061225190339086908990600401614550565b602060405180830381600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a39190614120565b50609e8054850190556097546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b1580156122f157600080fd5b505afa158015612305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123299190614367565b60120360ff16600a0a850290506123403382613561565b60975460405133916001600160a01b03868116927fb045190548dadae679cfe9e337437613ca6dd73efdf984f75e56f152ccee22f0926123859216908a9087906145e1565b60405180910390a35050505050565b609a546001600160a01b031633146123be5760405162461bcd60e51b81526004016105899061487e565b6123fc848484848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061364192505050565b50505050565b6099546001600160a01b031681565b60a0818154811061242157600080fd5b6000918252602090912001546001600160a01b0316905081565b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061246a903090600401614522565b60206040518083038186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610560919061430b565b60a0546060908190600181016001600160401b03811180156124db57600080fd5b50604051908082528060200260200182016040528015612505578160200160208202803683370190505b509250806001016001600160401b038111801561252157600080fd5b5060405190808252806020026020018201604052801561254b578160200160208202803683370190505b5091503060005b828161ffff16101561265157600060a08261ffff168154811061257157fe5b9060005260206000200160009054906101000a90046001600160a01b0316905080868361ffff16815181106125a257fe5b6001600160a01b0392831660209182029290920101526040516370a0823160e01b8152908216906370a08231906125dd908690600401614522565b60206040518083038186803b1580156125f557600080fd5b505afa158015612609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262d919061430b565b858361ffff168151811061263d57fe5b602090810291909101015250600101612552565b5060975484516001600160a01b039091169085908490811061266f57fe5b6001600160a01b0392831660209182029290920101526097546040516370a0823160e01b81529116906370a08231906126ac908490600401614522565b60206040518083038186803b1580156126c457600080fd5b505afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061430b565b83838151811061270857fe5b60200260200101818152505050509091565b609a546001600160a01b031633146127445760405162461bcd60e51b81526004016105899061487e565b609960009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b15801561279257600080fd5b505afa1580156127a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ca9190614120565b156127e75760405162461bcd60e51b815260040161058990614b2e565b609b5442106128085760405162461bcd60e51b815260040161058990614953565b6000609b819055609c55307fbfa7d46262a9a31ea77e88a2181c8df97ba63688b0743969005d612d614faba061283c6109c7565b609e5460405161284d929190614bd2565b60405180910390a2565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b609a546001600160a01b031633146128ac5760405162461bcd60e51b81526004016105899061487e565b609960009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b1580156128fa57600080fd5b505afa15801561290e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129329190614120565b1561294f5760405162461bcd60e51b815260040161058990614b2e565b609b5442106129705760405162461bcd60e51b815260040161058990614953565b609b80544291829055609c805492909103918290039055307f988bab2d311a3197c54ae6370e575b45cf0b80e8c256af625ff0019277f8aa9b6129b16109c7565b609e54609b54609c546040516129ca9493929190614bff565b60405180910390a250565b606060a080548060200260200160405190810160405280929190818152602001828054801561053e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612a0f575050505050905090565b60a05460609081908190600090600181016001600160401b0381118015612a5c57600080fd5b50604051908082528060200260200182016040528015612a86578160200160208202803683370190505b509450806001016001600160401b0381118015612aa257600080fd5b50604051908082528060200260200182016040528015612acc578160200160208202803683370190505b509350806001016001600160401b0381118015612ae857600080fd5b50604051908082528060200260200182016040528015612b12578160200160208202803683370190505b5060995490935030906001600160a01b031660005b838161ffff161015612d3d57600060a08261ffff1681548110612b4657fe5b9060005260206000200160009054906101000a90046001600160a01b0316905080898361ffff1681518110612b7757fe5b6001600160a01b0392831660209182029290920101526040516370a0823160e01b8152908216906370a0823190612bb2908790600401614522565b60206040518083038186803b158015612bca57600080fd5b505afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c02919061430b565b888361ffff1681518110612c1257fe5b6020026020010181815250506000888361ffff1681518110612c3057fe5b60200260200101511115612cf457826001600160a01b0316635637c1aa828a8561ffff1681518110612c5e57fe5b60200260200101516040518363ffffffff1660e01b8152600401612c83929190614591565b60206040518083038186803b158015612c9b57600080fd5b505afa158015612caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd3919061430b565b878361ffff1681518110612ce357fe5b602002602001018181525050612d13565b6000878361ffff1681518110612d0657fe5b6020026020010181815250505b868261ffff1681518110612d2357fe5b602002602001015186019550508080600101915050612b27565b5060975487516001600160a01b0390911690889085908110612d5b57fe5b6001600160a01b0392831660209182029290920101526097546040516370a0823160e01b81529116906370a0823190612d98908590600401614522565b60206040518083038186803b158015612db057600080fd5b505afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de8919061430b565b868481518110612df457fe5b602002602001018181525050858381518110612e0c57fe5b6020026020010151858481518110612e2057fe5b602002602001018181525050848381518110612e3857fe5b60200260200101518401935050505090919293565b6097546001600160a01b031681565b60a28181548110612e6c57600080fd5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015612efd5780601f10612ed257610100808354040283529160200191612efd565b820191906000526020600020905b815481529060010190602001808311612ee057829003601f168201915b505050505081565b3390565b6001600160a01b038316612f4e5760405162461bcd60e51b8152600401808060200182810382526024815260200180614e3b6024913960400191505060405180910390fd5b6001600160a01b038216612f935760405162461bcd60e51b8152600401808060200182810382526022815260200180614d376022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000826130055750609854610560565b8261300e610e92565b60ff16600a0a83028161301d57fe5b049392505050565b60008282111561307c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0383166130c75760405162461bcd60e51b8152600401808060200182810382526025815260200180614e166025913960400191505060405180910390fd5b6001600160a01b03821661310c5760405162461bcd60e51b8152600401808060200182810382526023815260200180614cf26023913960400191505060405180910390fd5b6131178383836132a3565b61315481604051806060016040528060268152602001614d59602691396001600160a01b03861660009081526033602052604090205491906131cd565b6001600160a01b0380851660009081526033602052604080822093909355908416815220546131839082613392565b6001600160a01b038084166000818152603360209081526040918290209490945580518581529051919392871692600080516020614dd583398151915292918290030190a3505050565b6000818484111561325c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613221578181015183820152602001613209565b50505050905090810190601f16801561324e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60005b60ff81168211156132a35761329b83838360ff1681811061328457fe5b90506020028101906132969190614c28565b613762565b600101613267565b505050565b6001600160a01b0382166132ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614df56021913960400191505060405180910390fd5b6132f9826000836132a3565b61333681604051806060016040528060228152602001614d15602291396001600160a01b03851660009081526033602052604090205491906131cd565b6001600160a01b03831660009081526033602052604090205560355461335c9082613025565b6035556040805182815290516000916001600160a01b03851691600080516020614dd58339815191529181900360200190a35050565b6000828201838110156133ea576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b60006133fc30613806565b15905090565b600054610100900460ff168061341b575061341b6133f1565b80613429575060005460ff16155b6134645760405162461bcd60e51b815260040180806020018281038252602e815260200180614d7f602e913960400191505060405180910390fd5b600054610100900460ff1615801561348f576000805460ff1961ff0019909116610100171660011790555b61349761380c565b6134a183836138ac565b80156132a3576000805461ff0019169055505050565b600054610100900460ff16806134d057506134d06133f1565b806134de575060005460ff16155b6135195760405162461bcd60e51b815260040180806020018281038252602e815260200180614d7f602e913960400191505060405180910390fd5b600054610100900460ff16158015613544576000805460ff1961ff0019909116610100171660011790555b61354c613984565b801561355e576000805461ff00191690555b50565b6001600160a01b0382166135bc576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6135c8600083836132a3565b6035546135d59082613392565b6035556001600160a01b0382166000908152603360205260409020546135fb9082613392565b6001600160a01b0383166000818152603360209081526040808320949094558351858152935192939192600080516020614dd58339815191529281900390910190a35050565b60005b81518160ff1610156136775761366f828260ff168151811061366257fe5b6020026020010151613a2a565b600101613644565b5060005b60ff81168311156136ba576136b284848360ff1681811061369857fe5b90506020020160208101906136ad9190613ebf565b613b81565b60010161367b565b50609960009054906101000a90046001600160a01b03166001600160a01b031663c0109cd36040518163ffffffff1660e01b815260040160206040518083038186803b15801561370957600080fd5b505afa15801561371d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613741919061430b565b60a05411156132a35760405162461bcd60e51b81526004016105899061485c565b60a2805460018101825560009190915261379f907faaf4f58de99300cfadc4585755f376d5fa747d5bc561d5bd9d710de1f91bf42d018383613d1b565b5060a25460405160a3906137b69085908590614486565b9081526040519081900360200181209190915530907f0f3b4e6dd59c315df25d2a426f85f0a572fe92c6892bdae9785ab472da86c959906137fa90859085906146ac565b60405180910390a25050565b3b151590565b600054610100900460ff168061382557506138256133f1565b80613833575060005460ff16155b61386e5760405162461bcd60e51b815260040180806020018281038252602e815260200180614d7f602e913960400191505060405180910390fd5b600054610100900460ff1615801561354c576000805460ff1961ff001990911661010017166001179055801561355e576000805461ff001916905550565b600054610100900460ff16806138c557506138c56133f1565b806138d3575060005460ff16155b61390e5760405162461bcd60e51b815260040180806020018281038252602e815260200180614d7f602e913960400191505060405180910390fd5b600054610100900460ff16158015613939576000805460ff1961ff0019909116610100171660011790555b825161394c906036906020860190613da7565b508151613960906037906020850190613da7565b506038805460ff1916601217905580156132a3576000805461ff0019169055505050565b600054610100900460ff168061399d575061399d6133f1565b806139ab575060005460ff16155b6139e65760405162461bcd60e51b815260040180806020018281038252602e815260200180614d7f602e913960400191505060405180910390fd5b600054610100900460ff16158015613a11576000805460ff1961ff0019909116610100171660011790555b6001606555801561355e576000805461ff001916905550565b613a3381611e82565b613a4f5760405162461bcd60e51b81526004016105899061472c565b6000613a5a8261243b565b1115613a785760405162461bcd60e51b8152600401610589906148a4565b60a08054906000906000198301838110613a8e57fe5b60009182526020808320909101546001600160a01b03868116845260a190925260409092205460a080549290931693506000190191839183908110613acf57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055848316825260a19052604080822060018501905591861681529081205560a0805480613b1f57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556040517f0fa1e4606af435f32f05b3804033d2933e691fab32ee74d2db6fa82d2741f1ea90613b739030908790614536565b60405180910390a150505050565b6097546001600160a01b0382811691161415613baf5760405162461bcd60e51b8152600401610589906148f5565b60995460405163f9eaee0d60e01b81526001600160a01b039091169063f9eaee0d90613bdf908490600401614522565b60206040518083038186803b158015613bf757600080fd5b505afa158015613c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2f9190614120565b613c4b5760405162461bcd60e51b8152600401610589906146fb565b613c5481611e82565b61355e5760a080546001810182557f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e880180546001600160a01b0319166001600160a01b0384169081179091559054600091825260a1602052604091829020555130907f0bb5715f0f217c2fe9a0c877ea87d474380c641102f3440ee2a4c8b9d9790918906129ca908490614522565b6040518060a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613d515760008555613d97565b82601f10613d6a5782800160ff19823516178555613d97565b82800160010185558215613d97579182015b82811115613d97578235825591602001919060010190613d7c565b50613da3929150613e23565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613ddd5760008555613d97565b82601f10613df657805160ff1916838001178555613d97565b82800160010185558215613d97579182015b82811115613d97578251825591602001919060010190613e08565b5b80821115613da35760008155600101613e24565b60008083601f840112613e49578182fd5b5081356001600160401b03811115613e5f578182fd5b6020830191508360208083028501011115613e7957600080fd5b9250929050565b60008083601f840112613e91578182fd5b5081356001600160401b03811115613ea7578182fd5b602083019150836020828501011115613e7957600080fd5b600060208284031215613ed0578081fd5b81356133ea81614cdc565b600060208284031215613eec578081fd5b81516133ea81614cdc565b60008060408385031215613f09578081fd5b8235613f1481614cdc565b91506020830135613f2481614cdc565b809150509250929050565b600080600060608486031215613f43578081fd5b8335613f4e81614cdc565b92506020840135613f5e81614cdc565b929592945050506040919091013590565b600080600060408486031215613f83578283fd5b8335613f8e81614cdc565b925060208401356001600160401b03811115613fa8578283fd5b613fb486828701613e80565b9497909650939450505050565b60008060408385031215613fd3578182fd5b8251613fde81614cdc565b60208401519092506001600160401b03811115613ff9578182fd5b8301601f81018513614009578182fd5b805161401c61401782614c8f565b614c6c565b818152866020838501011115614030578384fd5b614041826020830160208601614cb0565b8093505050509250929050565b60008060408385031215614060578182fd5b823561406b81614cdc565b946020939093013593505050565b6000806000806040858703121561408e578081fd5b84356001600160401b03808211156140a4578283fd5b6140b088838901613e38565b909650945060208701359150808211156140c8578283fd5b506140d587828801613e38565b95989497509550505050565b600080602083850312156140f3578182fd5b82356001600160401b03811115614108578283fd5b61411485828601613e38565b90969095509350505050565b600060208284031215614131578081fd5b815180151581146133ea578182fd5b6000806000806000806000806000898b0361012081121561415f578788fd5b8a356001600160401b038082111561417557898afd5b6141818e838f01613e80565b909c509a5060208d013591508082111561419957898afd5b6141a58e838f01613e80565b909a50985060408d013591506141ba82614cdc565b90965060608c0135906141cc82614cdc565b8196506080607f19840112156141e0578586fd5b604051925060808301915082821081831117156141f957fe5b8160405260808d0135835260a08d0135602084015260c08d0135604084015260e08d013560608401528295506101008d0135925080831115614239578485fd5b50506142478c828d01613e38565b915080935050809150509295985092959850929598565b60006020828403121561426f578081fd5b81356001600160401b03811115614284578182fd5b8201601f81018413614294578182fd5b80356142a261401782614c8f565b8181528560208385010111156142b6578384fd5b81602084016020830137908101602001929092525092915050565b6000602082840312156142e2578081fd5b815161ffff811681146133ea578182fd5b600060208284031215614304578081fd5b5035919050565b60006020828403121561431c578081fd5b5051919050565b60008060408385031215614335578182fd5b50508035926020909101359150565b60008060408385031215614356578182fd5b505080516020909101519092909150565b600060208284031215614378578081fd5b815160ff811681146133ea578182fd5b6000815180845260208085019450808401835b838110156143c05781516001600160a01b03168752958201959082019060010161439b565b509495945050505050565b6000815180845260208085019450808401835b838110156143c057815180516001600160a01b03168852838101518489015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016143de565b6000815180845260208085019450808401835b838110156143c057815187529582019590820190600101614440565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000828483379101908152919050565b600082516144a8818460208701614cb0565b9190910192915050565b60008083546001808216600081146144d157600181146144e857614517565b60ff198316865260028304607f1686019350614517565b600283048786526020808720875b8381101561450f5781548a8201529085019082016144f6565b505050860193505b509195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0392909216825261ffff16602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b038581168252841660208201526060604082018190526000906145d7908301848661445c565b9695505050505050565b6001600160a01b039390931683526020830191909152604082015260600190565b6000602082526133ea6020830184614388565b6000604082526146286040830185614388565b828103602084015261463a818561442d565b95945050505050565b6000608082526146566080830187614388565b8281036020840152614668818761442d565b9050828103604084015261467c818661442d565b91505082606083015295945050505050565b6000602082526133ea60208301846143cb565b901515815260200190565b6000602082526146c060208301848661445c565b949350505050565b60006020825282518060208401526146e7816040850160208701614cb0565b601f01601f19169190910160400192915050565b6020808252601790820152764e6f7420696e2077686974656c69737420746f6b656e7360481b604082015260600190565b6020808252600e908201526d496e76616c69644164647265737360901b604082015260600190565b6020808252600d908201526c139bdd115b9bdd59da119d5b99609a1b604082015260600190565b6020808252601190820152702330b4b632b22a3930b739b0b1ba34b7b760791b604082015260600190565b6020808252601190820152705a65726f20506173732042616c616e636560781b604082015260600190565b6020808252601d908201527f4173736574206e6f7420656e61626c656420696e207468697320706f74000000604082015260600190565b602080825260159082015274556e61626c65546f436c61696d5768656e4c69766560581b604082015260600190565b6020808252600b908201526a16995c9bc8185b5bdd5b9d60aa1b604082015260600190565b602080825260089082015267082c4deecca9ac2f60c31b604082015260600190565b6020808252600c908201526b37b7363c9036b0b730b3b2b960a11b604082015260600190565b6020808252600d908201526c139bdd16995c9bd05b5bdd5b9d609a1b604082015260600190565b60208082526010908201526f496e76616c696420706c6174666f726d60801b604082015260600190565b602080825260159082015274496e76616c6964206173736574206164647265737360581b604082015260600190565b602080825260159082015274496e76616c6964206775617264206164647265737360581b604082015260600190565b602080825260149082015273486173436c6f73656446756e6472616973696e6760601b604082015260600190565b60208082526010908201526f4e6f74456e6f75676842616c616e636560801b604082015260600190565b6020808252600a908201526916995c9bd05b5bdd5b9d60b21b604082015260600190565b60208082526023908201527f5468652066756e64696e6720706572696f642073686f756c6420626520636c6f6040820152621cd95960ea1b606082015260800190565b60208082526012908201527141626f7665206d617820636170616369747960701b604082015260600190565b6020808252600b908201526a5a65726f4164647265737360a81b604082015260600190565b6020808252601190820152705374696c6c2066756e6472616973696e6760781b604082015260600190565b6020808252601b908201527a10995b1bddc81b5a5b881a5b9d995cdd1b595b9d08185b5bdd5b9d602a1b604082015260600190565b6020808252601b908201527a556e61626c65546f57697468647261775768656e4e6f744c69766560281b604082015260600190565b6020808252601c908201527b556e61626c65546f57697468647261775768696c654c6f636b696e6760201b604082015260600190565b60208082526010908201526f18dbdb9d1c9858dd1cc81c185d5cd95960821b604082015260600190565b60208082526012908201527124b73b30b634b22a3930b739b0b1ba34b7b760711b604082015260600190565b6020808252600c908201526b14db1a5c1c1859d9481a1a5d60a21b604082015260600190565b90815260200190565b9283526001600160a01b03919091166020830152604082015260600190565b918252602082015260400190565b60008482528360208301526060604083015261463a60608301846143cb565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6000808335601e19843603018112614c3e578283fd5b8301803591506001600160401b03821115614c57578283fd5b602001915036819003821315613e7957600080fd5b6040518181016001600160401b0381118282101715614c8757fe5b604052919050565b60006001600160401b03821115614ca257fe5b50601f01601f191660200190565b60005b83811015614ccb578181015183820152602001614cb3565b838111156123fc5750506000910152565b6001600160a01b038116811461355e57600080fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209cf60836d32279c2fd90ae753e09ec7080cf90caadad0cff362e0ab4d9f4fc0a64736f6c63430007060033