[ { "inputs": [ { "internalType": "address", "name": "_nativeTokenWrapper", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ContractMetadataUnauthorized", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expected", "type": "uint256" }, { "internalType": "uint256", "name": "actual", "type": "uint256" } ], "name": "CurrencyTransferLibMismatchedValue", "type": "error" }, { "inputs": [], "name": "OwnableUnauthorized", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "PermissionsAlreadyGranted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "expected", "type": "address" }, { "internalType": "address", "name": "actual", "type": "address" } ], "name": "PermissionsInvalidPermission", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "PermissionsUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "max", "type": "uint256" }, { "internalType": "uint256", "name": "actual", "type": "uint256" } ], "name": "RoyaltyExceededMaxFeeBps", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "RoyaltyInvalidRecipient", "type": "error" }, { "inputs": [], "name": "RoyaltyUnauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "prevURI", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newRoyaltyBps", "type": "uint256" } ], "name": "DefaultRoyalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "prevOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "packId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalPacksCreated", "type": "uint256" } ], "name": "PackCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "packId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "opener", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "numOfPacksOpened", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "indexed": false, "internalType": "struct ITokenBundle.Token[]", "name": "rewardUnitsDistributed", "type": "tuple[]" } ], "name": "PackOpened", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "packId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "totalPacksCreated", "type": "uint256" } ], "name": "PackUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "royaltyBps", "type": "uint256" } ], "name": "RoyaltyForToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_packId", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token[]", "name": "_contents", "type": "tuple[]" }, { "internalType": "uint256[]", "name": "_numOfRewardUnits", "type": "uint256[]" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "addPackContents", "outputs": [ { "internalType": "uint256", "name": "packTotalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "newSupplyAdded", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "canUpdatePack", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractType", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractVersion", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token[]", "name": "_contents", "type": "tuple[]" }, { "internalType": "uint256[]", "name": "_numOfRewardUnits", "type": "uint256[]" }, { "internalType": "string", "name": "_packUri", "type": "string" }, { "internalType": "uint128", "name": "_openStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "_amountDistributedPerOpen", "type": "uint128" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "createPack", "outputs": [ { "internalType": "uint256", "name": "packId", "type": "uint256" }, { "internalType": "uint256", "name": "packTotalSupply", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_packId", "type": "uint256" } ], "name": "getPackContents", "outputs": [ { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token[]", "name": "contents", "type": "tuple[]" }, { "internalType": "uint256[]", "name": "perUnitAmounts", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "member", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "count", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getRoyaltyInfoForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleId", "type": "uint256" } ], "name": "getTokenCountOfBundle", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getTokenOfBundle", "outputs": [ { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleId", "type": "uint256" } ], "name": "getUriOfBundle", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRoleWithSwitch", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultAdmin", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "internalType": "address[]", "name": "_trustedForwarders", "type": "address[]" }, { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155BatchReceived", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_packId", "type": "uint256" }, { "internalType": "uint256", "name": "_amountToOpen", "type": "uint256" } ], "name": "openPack", "outputs": [ { "components": [ { "internalType": "address", "name": "assetContract", "type": "address" }, { "internalType": "enum ITokenBundle.TokenType", "name": "tokenType", "type": "uint8" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "internalType": "struct ITokenBundle.Token[]", "name": "", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "setDefaultRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_bps", "type": "uint256" } ], "name": "setRoyaltyInfoForToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60a06040523480156200001157600080fd5b506040516200581038038062005810833981016040819052620000349162000159565b6001600160a01b038116608052600054610100900460ff1615808015620000625750600054600160ff909116105b806200007e5750303b1580156200007e575060005460ff166001145b620000e65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff1916600117905580156200010a576000805461ff0019166101001790555b801562000151576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50506200018b565b6000602082840312156200016c57600080fd5b81516001600160a01b03811681146200018457600080fd5b9392505050565b608051615662620001ae6000396000818161023001526138c701526156626000f3fe6080604052600436106102205760003560e01c8063914e126a1161011f578063914e126a1461063457806391d1485414610661578063938e3d7b1461068157806395d89b41146106a15780639bcf7a15146106b6578063a0a8e460146106d6578063a217fddf146106f2578063a22cb46514610707578063a32fa5b314610727578063a96b143814610747578063ac9650d81461075a578063b0381b0814610787578063b24f2d39146107b8578063bc197c81146107e3578063bd85b0391461080f578063ca15c8731461083d578063cb2ef6f71461085d578063d0d2fe2514610877578063d547741f146108a4578063e8a3d485146108c4578063e985e9c5146108d9578063f23a6e6114610922578063f242432a1461094e57600080fd5b8062fdd58e146102a057806301ffc9a7146102d357806306fdde0314610303578063092e6075146103255780630e89341c1461034d57806313af40351461036d578063150b7a021461038d5780631da799c9146103c6578063248a9ca3146103f35780632a55205a146104205780632eb2c2d61461044e5780632f2ff15d1461046e57806336568abe1461048e5780633b1475a7146104ae5780634cc157df146104c55780634e1273f414610507578063572b6c0514610534578063600dd5ea1461055457806361195e9414610574578063754b8fe7146105945780638d4c446a146105b45780638da5cb5b146105e25780639010d07c1461061457600080fd5b3661029b57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102995760405162461bcd60e51b815260206004820152601460248201527310b730ba34bb32aa37b5b2b72bb930b83832b91760611b60448201526064015b60405180910390fd5b005b600080fd5b3480156102ac57600080fd5b506102c06102bb36600461437b565b61096e565b6040519081526020015b60405180910390f35b3480156102df57600080fd5b506102f36102ee3660046143bd565b610a04565b60405190151581526020016102ca565b34801561030f57600080fd5b50610318610a62565b6040516102ca919061442a565b610338610333366004614598565b610af1565b604080519283526020830191909152016102ca565b34801561035957600080fd5b50610318610368366004614660565b610ca5565b34801561037957600080fd5b50610299610388366004614679565b610cb0565b34801561039957600080fd5b506103ad6103a8366004614696565b610ce1565b6040516001600160e01b031990911681526020016102ca565b3480156103d257600080fd5b506103e66103e1366004614701565b610cf2565b6040516102ca9190614783565b3480156103ff57600080fd5b506102c061040e366004614660565b60009081526007602052604090205490565b34801561042c57600080fd5b5061044061043b366004614701565b610d81565b6040516102ca929190614791565b34801561045a57600080fd5b50610299610469366004614843565b610dbe565b34801561047a57600080fd5b506102996104893660046148f0565b610e1c565b34801561049a57600080fd5b506102996104a93660046148f0565b610e8b565b3480156104ba57600080fd5b506102c06101055481565b3480156104d157600080fd5b506104e56104e0366004614660565b610ecf565b604080516001600160a01b03909316835261ffff9091166020830152016102ca565b34801561051357600080fd5b50610527610522366004614994565b610f3a565b6040516102ca9190614a33565b34801561054057600080fd5b506102f361054f366004614679565b61105b565b34801561056057600080fd5b5061029961056f36600461437b565b611079565b34801561058057600080fd5b5061031861058f366004614660565b6110a8565b3480156105a057600080fd5b506102996105af366004614a46565b61114d565b3480156105c057600080fd5b506105d46105cf366004614660565b6112fa565b6040516102ca929190614b58565b3480156105ee57600080fd5b506002546001600160a01b03165b6040516001600160a01b0390911681526020016102ca565b34801561062057600080fd5b506105fc61062f366004614701565b611489565b34801561064057600080fd5b5061065461064f366004614701565b611577565b6040516102ca9190614b86565b34801561066d57600080fd5b506102f361067c3660046148f0565b611756565b34801561068d57600080fd5b5061029961069c366004614b99565b611781565b3480156106ad57600080fd5b506103186117af565b3480156106c257600080fd5b506102996106d1366004614bcd565b6117bd565b3480156106e257600080fd5b50604051600281526020016102ca565b3480156106fe57600080fd5b506102c0600081565b34801561071357600080fd5b50610299610722366004614c13565b6117f2565b34801561073357600080fd5b506102f36107423660046148f0565b611804565b610338610755366004614c41565b61185a565b34801561076657600080fd5b5061077a610775366004614ccc565b611a61565b6040516102ca9190614d0d565b34801561079357600080fd5b506102f36107a2366004614660565b6101086020526000908152604090205460ff1681565b3480156107c457600080fd5b506004546001600160a01b03811690600160a01b900461ffff166104e5565b3480156107ef57600080fd5b506103ad6107fe366004614843565b63bc197c8160e01b95945050505050565b34801561081b57600080fd5b506102c061082a366004614660565b6101066020526000908152604090205481565b34801561084957600080fd5b506102c0610858366004614660565b611bd4565b34801561086957600080fd5b50635061636b60e01b6102c0565b34801561088357600080fd5b506102c0610892366004614660565b60009081526003602052604090205490565b3480156108b057600080fd5b506102996108bf3660046148f0565b611c5d565b3480156108d057600080fd5b50610318611c76565b3480156108e557600080fd5b506102f36108f4366004614d71565b6001600160a01b03918216600090815260d26020908152604080832093909416825291909152205460ff1690565b34801561092e57600080fd5b506103ad61093d366004614d9f565b63f23a6e6160e01b95945050505050565b34801561095a57600080fd5b50610299610969366004614d9f565b611c83565b60006001600160a01b0383166109d95760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b6064820152608401610290565b50600081815260d1602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610a0f82611cda565b80610a2a575063152a902d60e11b6001600160e01b03198316145b80610a455750630a85bd0160e11b6001600160e01b03198316145b806109fe5750506001600160e01b031916630271189760e51b1490565b6101038054610a7090614e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c90614e07565b8015610ae95780601f10610abe57610100808354040283529160200191610ae9565b820191906000526020600020905b815481529060010190602001808311610acc57829003601f168201915b505050505081565b60008060008051602061560d833981519152610b1481610b0f611d2a565b611d39565b610b1c611d64565b8915801590610b2a57508988145b610b465760405162461bcd60e51b815260040161029090614e3b565b610b5f6000805160206155c68339815191526000611756565b610bc15760005b8a811015610bbf57610bad6000805160206155c68339815191528d8d84818110610b9257610b92614e59565b610ba89260206080909202019081019150614679565b611dbd565b610bb8600182614e85565b9050610b66565b505b610105805493506001906000610bd78387614e85565b90915550610bf790508b8b8b8b8b886001600160801b038c166000611e04565b6000848152610107602090815260408083206001600160801b038a8116600160801b02908c16176001918201556101088352818420805460ff1916909117905580519182019052908152909250610c5390859085908590612109565b827f529034575398e71312a0b7b951d8ca42dce1529d774f4a255a587f64f649fff88584604051610c85929190614791565b60405180910390a2610c976001600955565b509850989650505050505050565b60606109fe826110a8565b610cb8612227565b610cd5576040516316ccb9cb60e11b815260040160405180910390fd5b610cde81612235565b50565b630a85bd0160e11b5b949350505050565b610cfa61432d565b6000838152600360209081526040808320858452600290810183529281902081516080810190925280546001600160a01b038116835291939092840191600160a01b900460ff1690811115610d5157610d51614723565b6002811115610d6257610d62614723565b8152600182015460208201526002909101546040909101529392505050565b600080600080610d9086610ecf565b90945084925061ffff169050612710610da98287614e98565b610db39190614ec5565b925050509250929050565b610dc6611d2a565b6001600160a01b0316856001600160a01b03161480610dec5750610dec856108f4611d2a565b610e085760405162461bcd60e51b815260040161029090614ed9565b610e158585858585612287565b5050505050565b600082815260076020526040902054610e359033611dbd565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff1615610e7d578082604051636a4e0b3560e11b8152600401610290929190614791565b610e878282612479565b5050565b336001600160a01b03821614610ec5576040516320b4e31160e11b81523360048201526001600160a01b0382166024820152604401610290565b610e87828261248d565b6000818152600560209081526040808320815180830190925280546001600160a01b031680835260019091015492820192909252829115610f165780516020820151610f30565b6004546001600160a01b03811690600160a01b900461ffff165b9250925050915091565b60608151835114610f9f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610290565b600083516001600160401b03811115610fba57610fba6144cc565b604051908082528060200260200182016040528015610fe3578160200160208202803683370190505b50905060005b84518110156110535761102e85828151811061100757611007614e59565b602002602001015185838151811061102157611021614e59565b602002602001015161096e565b82828151811061104057611040614e59565b6020908102919091010152600101610fe9565b509392505050565b6001600160a01b03166000908152606d602052604090205460ff1690565b611081612227565b61109e57604051636fae358160e11b815260040160405180910390fd5b610e8782826124e4565b60008181526003602052604090206001018054606091906110c890614e07565b80601f01602080910402602001604051908101604052809291908181526020018280546110f490614e07565b80156111415780601f1061111657610100808354040283529160200191611141565b820191906000526020600020905b81548152906001019060200180831161112457829003601f168201915b50505050509050919050565b600054610100900460ff161580801561116d5750600054600160ff909116105b8061118e575061117c30612574565b15801561118e575060005460ff166001145b6111f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610290565b6000805460ff191660011790558015611214576000805461ff0019166101001790555b61121d85612583565b61010361122a8882614f6f565b506101046112388782614f6f565b50611242856125b3565b61124b88612235565b611256600089612479565b61126e60008051602061560d83398151915289612479565b6112876000805160206155c68339815191526000612479565b6112a06000805160206155868339815191526000612479565b6112aa83836124e4565b80156112f0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60008181526101076020908152604080832081518154608094810282018501909352606081810184815290958695909492939284929184919084018282801561136257602002820191906000526020600020905b81548152602001906001019080831161134e575b5050509183525050600191909101546001600160801b038082166020840152600160801b90910416604090910152905060006113aa8560009081526003602052604090205490565b9050806001600160401b038111156113c4576113c46144cc565b6040519080825280602002602001820160405280156113fd57816020015b6113ea61432d565b8152602001906001900390816113e25790505b509350806001600160401b03811115611418576114186144cc565b604051908082528060200260200182016040528015611441578160200160208202803683370190505b50925060005b8181101561147e576114598682610cf2565b85828151811061146b5761146b614e59565b6020908102919091010152600101611447565b505051919391925050565b60008281526008602052604081205481805b8281101561156e5760008681526008602090815260408083208484526001019091529020546001600160a01b031615611517578482036115055760008681526008602090815260408083209383526001909301905220546001600160a01b031692506109fe915050565b611510600183614e85565b915061155c565b611522866000611756565b80156115495750600086815260086020908152604080832083805260020190915290205481145b1561155c57611559600183614e85565b91505b611567600182614e85565b905061149b565b50505092915050565b6060611581611d64565b600061158b611d2a565b90506001600160a01b03811632146115ce5760405162461bcd60e51b81526004016102909060208082526004908201526321454f4160e01b604082015260600190565b826115d9828661096e565b10156115f75760405162461bcd60e51b81526004016102909061502e565b600084815261010760209081526040808320815181546080948102820185019093526060810183815290939192849284919084018282801561165857602002820191906000526020600020905b815481526020019060010190808311611644575b5050509183525050600191909101546001600160801b03808216602080850191909152600160801b909204811660409093019290925282015191925042911611156116d15760405162461bcd60e51b815260206004820152600960248201526831b0b73a1037b832b760b91b6044820152606401610290565b60006116ec868684604001516001600160801b03168561268f565b90506116f9838787612a33565b611704308483612bc0565b826001600160a01b0316867f58bbfaa763248693d05ac650926341943af86affd998d80e41dbcc9adfdae607878460405161174092919061504c565b60405180910390a3925050506109fe6001600955565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611789612227565b6117a657604051639f7f092560e01b815260040160405180910390fd5b610cde816125b3565b6101048054610a7090614e07565b6117c5612227565b6117e257604051636fae358160e11b815260040160405180910390fd5b6117ed838383612ce2565b505050565b610e876117fd611d2a565b8383612d96565b600082815260066020908152604080832083805290915281205460ff16611851575060008281526006602090815260408083206001600160a01b038516845290915290205460ff166109fe565b50600192915050565b60008060008051602061560d83398151915261187881610b0f611d2a565b611880611d64565b6000898152610108602052604090205460ff166118ca5760405162461bcd60e51b815260206004820152600860248201526708505b1b1bddd95960c21b6044820152606401610290565b86158015906118d857508685145b6118f45760405162461bcd60e51b815260040161029090614e3b565b6118fe848a61096e565b60000361191d5760405162461bcd60e51b81526004016102909061502e565b6119366000805160206155c68339815191526000611756565b61197d5760005b8781101561197b576119696000805160206155c68339815191528a8a84818110610b9257610b92614e59565b611974600182614e85565b905061193d565b505b600061010760008b815260200190815260200160002060010160109054906101000a90046001600160801b03166001600160801b031690506119d589898989604051806020016040528060008152508f876001611e04565b60008b815261010660205260409020549093506119f3908490614e85565b9350611a10858b8560405180602001604052806000815250612109565b897fdf54045461e7fa6cda88afd9b979d29bb9ef67b8271562cec9a7a95ddc3afe728685604051611a42929190614791565b60405180910390a250611a556001600955565b50965096945050505050565b6060816001600160401b03811115611a7b57611a7b6144cc565b604051908082528060200260200182016040528015611aae57816020015b6060815260200190600190039081611a995790505b5090506000611abb611d2a565b9050336001600160a01b038216141560005b8481101561156e578115611b4c57611b2a30878784818110611af157611af1614e59565b9050602002810190611b039190615065565b86604051602001611b16939291906150ab565b604051602081830303815290604052612e6e565b848281518110611b3c57611b3c614e59565b6020026020010181905250611bcc565b611bae30878784818110611b6257611b62614e59565b9050602002810190611b749190615065565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e6e92505050565b848281518110611bc057611bc0614e59565b60200260200101819052505b600101611acd565b600081815260086020526040812054815b81811015611c385760008481526008602090815260408083208484526001019091529020546001600160a01b031615611c2657611c23600184614e85565b92505b611c31600182614e85565b9050611be5565b50611c44836000611756565b15611c5757611c54600183614e85565b91505b50919050565b600082815260076020526040902054610ec59033611dbd565b60018054610a7090614e07565b611c8b611d2a565b6001600160a01b0316856001600160a01b03161480611cb15750611cb1856108f4611d2a565b611ccd5760405162461bcd60e51b815260040161029090614ed9565b610e158585858585612e9a565b60006001600160e01b03198216636cdb3d1360e11b1480611d0b57506001600160e01b031982166303a24d0760e21b145b806109fe57506301ffc9a760e01b6001600160e01b03198316146109fe565b6000611d34612fcf565b905090565b611d438282611804565b610e8757808260405163043c588360e11b8152600401610290929190614791565b600260095403611db65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610290565b6002600955565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff16610e8757808260405163043c588360e11b8152600401610290929190614791565b60008060005b89811015611fdd578a8a82818110611e2457611e24614e59565b90506080020160600135600003611e655760405162461bcd60e51b81526020600482015260056024820152640c08185b5d60da1b6044820152606401610290565b888882818110611e7757611e77614e59565b905060200201358b8b83818110611e9057611e90614e59565b90506080020160600135611ea491906150cc565b15611ec15760405162461bcd60e51b8152600401610290906150e0565b60018b8b83818110611ed557611ed5614e59565b9050608002016020016020810190611eed9190615109565b6002811115611efe57611efe614723565b141580611f2657508a8a82818110611f1857611f18614e59565b905060800201606001356001145b611f425760405162461bcd60e51b8152600401610290906150e0565b888882818110611f5457611f54614e59565b9050602002013582611f669190614e85565b600087815261010760205260409020909250898983818110611f8a57611f8a614e59565b905060200201358c8c84818110611fa357611fa3614e59565b90506080020160600135611fb79190614ec5565b815460018181018455600093845260209093200155611fd69082614e85565b9050611e0a565b50611fe884826150cc565b1561201e5760405162461bcd60e51b81526004016102909060208082526004908201526308505b5d60e21b604082015260600190565b6120288482614ec5565b915082156120e85760005b8981101561207e5761206c8b8b8381811061205057612050614e59565b9050608002018036038101906120669190615126565b87612ff4565b612077600182614e85565b9050612033565b506120e361208a611d2a565b308c8c808060200260200160405190810160405280939291908181526020016000905b828210156120d9576120ca60808302860136819003810190615126565b815260200190600101906120ad565b5050505050612bc0565b6120fc565b6120fc6120f3611d2a565b8b8b89896130b9565b5098975050505050505050565b6001600160a01b0384166121695760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610290565b6000612173611d2a565b9050600061218085613121565b9050600061218d85613121565b905061219e8360008985858961316c565b600086815260d1602090815260408083206001600160a01b038b168452909152812080548792906121d0908490614e85565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716916000805160206155a6833981519152910160405180910390a461221e836000898989896133e3565b50505050505050565b6000611d348161067c611d2a565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a35050565b81518351146122e95760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610290565b6001600160a01b03841661230f5760405162461bcd60e51b81526004016102909061519a565b6000612319611d2a565b905061232981878787878761316c565b60005b845181101561240b57600085828151811061234957612349614e59565b60200260200101519050600085838151811061236757612367614e59565b602090810291909101810151600084815260d1835260408082206001600160a01b038e1683529093529190912054909150818110156123b85760405162461bcd60e51b8152600401610290906151df565b600083815260d1602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906123f7908490614e85565b90915550506001909301925061232c915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161245b929190615229565b60405180910390a4612471818787878787613545565b505050505050565b6124838282613607565b610e878282613662565b61249782826136cf565b60008281526008602090815260408083206001600160a01b03851680855260028201808552838620805487526001909301855292852080546001600160a01b031916905584529152555050565b61271081111561251257604051630a4930ad60e31b8152612710600482015260248101829052604401610290565b600480546001600160a01b0384166001600160b01b03199091168117600160a01b61ffff851602179091556040518281527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb9060200160405180910390a25050565b6001600160a01b03163b151590565b600054610100900460ff166125aa5760405162461bcd60e51b81526004016102909061523c565b610cde81613731565b6000600180546125c290614e07565b80601f01602080910402602001604051908101604052809291908181526020018280546125ee90614e07565b801561263b5780601f106126105761010080835404028352916020019161263b565b820191906000526020600020905b81548152906001019060200180831161261e57829003601f168201915b5050505050905081600190816126519190614f6f565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168183604051612683929190615287565b60405180910390a15050565b6060600061269d8486614e98565b9050806001600160401b038111156126b7576126b76144cc565b6040519080825280602002602001820160405280156126f057816020015b6126dd61432d565b8152602001906001900390816126d55790505b506000878152610106602052604081205491935090612710908690614e98565b60008881526003602052604081205491925061272a613761565b905060006127378a6112fa565b5090506000836001600160401b03811115612754576127546144cc565b60405190808252806020026020018201604052801561277d578160200160208202803683370190505b50905060005b868110156129cd576040805160208082018790528183018490528251808303840181526060909201909252805191012060006127bf88836150cc565b90506000805b888110156129be5760008d6000015182815181106127e5576127e5614e59565b6020026020010151905060008189848151811061280457612804614e59565b60200260200101516060015161281a9190614ec5565b90506128268185614e85565b8510156129a8578189848151811061284057612840614e59565b602002602001015160600181815161285891906152ac565b905250875160019089908590811061287257612872614e59565b60200260200101901515908115158152505088838151811061289657612896614e59565b6020026020010151600001518e88815181106128b4576128b4614e59565b60209081029190910101516001600160a01b03909116905288518990849081106128e0576128e0614e59565b6020026020010151602001518e88815181106128fe576128fe614e59565b602002602001015160200190600281111561291b5761291b614723565b9081600281111561292e5761292e614723565b8152505088838151811061294457612944614e59565b6020026020010151604001518e888151811061296257612962614e59565b60200260200101516040018181525050818e888151811061298557612985614e59565b60209081029190910101516060015261299f60018d6152ac565b9b5050506129be565b6129b28185614e85565b935050506001016127c5565b50836001019350505050612783565b5060005b84811015612a24578181815181106129eb576129eb614e59565b602002602001015115612a1c57612a1c838281518110612a0d57612a0d614e59565b60200260200101518d836137bb565b6001016129d1565b50505050505050949350505050565b6001600160a01b038316612a955760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610290565b6000612a9f611d2a565b90506000612aac84613121565b90506000612ab984613121565b9050612ad98387600085856040518060200160405280600081525061316c565b600085815260d1602090815260408083206001600160a01b038a16845290915290205484811015612b585760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610290565b600086815260d1602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816916000805160206155a6833981519152910160405180910390a460408051602081019091526000905261221e565b6000805b8251811015612c925773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316838281518110612bfd57612bfd614e59565b6020026020010151600001516001600160a01b0316148015612c2757506001600160a01b03841630145b15612c5c57828181518110612c3e57612c3e614e59565b60200260200101516060015182612c559190614e85565b9150612c80565b612c808585858481518110612c7357612c73614e59565b6020026020010151613899565b612c8b600182614e85565b9050612bc4565b508015612cdc576040805160808101825273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81526000602082018190529181019190915260608101829052610e15858583613899565b50505050565b612710811115612d1057604051630a4930ad60e31b8152612710600482015260248101829052604401610290565b6040805180820182526001600160a01b038481168083526020808401868152600089815260058352869020945185546001600160a01b031916941693909317845591516001909301929092559151838152909185917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d91015b60405180910390a3505050565b816001600160a01b0316836001600160a01b031603612e095760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610290565b6001600160a01b03838116600081815260d26020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101612d89565b6060612e9383836040518060600160405280602781526020016155e6602791396139ea565b9392505050565b6001600160a01b038416612ec05760405162461bcd60e51b81526004016102909061519a565b6000612eca611d2a565b90506000612ed785613121565b90506000612ee485613121565b9050612ef483898985858961316c565b600086815260d1602090815260408083206001600160a01b038c16845290915290205485811015612f375760405162461bcd60e51b8152600401610290906151df565b600087815260d1602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612f76908490614e85565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816916000805160206155a6833981519152910160405180910390a4612fc4848a8a8a8a8a6133e3565b505050505050505050565b6000612fda3361105b565b15612fec575060131936013560601c90565b503390565b90565b612ffd82613a62565b600081815260036020908152604080832080548085526002918201845291909320855181546001600160a01b039091166001600160a01b0319821681178355938701519294879492939284926001600160a81b0319161790600160a01b90849081111561306c5761306c614723565b0217905550604082015181600101556060820151816002015590505060016003600084815260200190815260200160002060000160008282546130af9190614e85565b9091555050505050565b6130c4848483613d1d565b6130ce8282613e46565b610e1585308686808060200260200160405190810160405280939291908181526020016000905b828210156120d95761311260808302860136819003810190615126565b815260200190600101906130f5565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061315b5761315b614e59565b602090810291909101015292915050565b6131856000805160206155868339815191526000611756565b15801561319a57506001600160a01b03851615155b80156131ae57506001600160a01b03841615155b15613226576131cb60008051602061558683398151915286611756565b806131e957506131e960008051602061558683398151915285611756565b6132265760405162461bcd60e51b815260206004820152600e60248201526d215452414e534645525f524f4c4560901b6044820152606401610290565b6001600160a01b0385166132a95760005b83518110156132a35782818151811061325257613252614e59565b6020026020010151610106600086848151811061327157613271614e59565b6020026020010151815260200190815260200160002060008282546132969190614e85565b9091555050600101613237565b50613366565b60005b83518110156133645761010860008583815181106132cc576132cc614e59565b60209081029190910181015182528101919091526040016000205460ff168015613310575082818151811061330357613303614e59565b6020026020010151600014155b1561335c576000610108600086848151811061332e5761332e614e59565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6001016132ac565b505b6001600160a01b0384166124715760005b835181101561221e5782818151811061339257613392614e59565b602002602001015161010660008684815181106133b1576133b1614e59565b6020026020010151815260200190815260200160002060008282546133d691906152ac565b9091555050600101613377565b6133f5846001600160a01b0316612574565b156124715760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061342e90899089908890889088906004016152bf565b6020604051808303816000875af1925050508015613469575060408051601f3d908101601f19168201909252613466918101906152f9565b60015b61351557613475615316565b806308c379a0036134ae5750613489615331565b8061349457506134b0565b8060405162461bcd60e51b8152600401610290919061442a565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610290565b6001600160e01b0319811663f23a6e6160e01b1461221e5760405162461bcd60e51b8152600401610290906153ba565b613557846001600160a01b0316612574565b156124715760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906135909089908990889088908890600401615402565b6020604051808303816000875af19250505080156135cb575060408051601f3d908101601f191682019092526135c8918101906152f9565b60015b6135d757613475615316565b6001600160e01b0319811663bc197c8160e01b1461221e5760405162461bcd60e51b8152600401610290906153ba565b60008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000828152600860205260408120805491600191906136818385614e85565b9091555050600092835260086020908152604080852083865260018101835281862080546001600160a01b039096166001600160a01b03199096168617905593855260029093019052912055565b6136d98282611dbd565b60008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600054610100900460ff166137585760405162461bcd60e51b81526004016102909061523c565b610cde81613e61565b600061376b611d2a565b6137766001436152ac565b60405160609290921b6001600160601b03191660208301524060348201524460548201526074016040516020818303038152906040528051906020012060001c905090565b60008281526003602052604090205481106138045760405162461bcd60e51b8152602060048201526009602482015268696e64657820444e4560b81b6044820152606401610290565b61380d83613a62565b6000828152600360209081526040808320848452600290810183529220855181546001600160a01b039091166001600160a01b03198216811783559287015187949293909284926001600160a81b03191690911790600160a01b90849081111561387957613879614723565b021790555060408201516001820155606090910151600290910155505050565b6000816020015160028111156138b1576138b1614723565b036138eb576117ed8160000151848484606001517f0000000000000000000000000000000000000000000000000000000000000000613e6d565b60018160200151600281111561390357613903614723565b0361396c5780516040808301519051632142170760e11b81526001600160a01b03909216916342842e0e9161393e9187918791600401615460565b600060405180830381600087803b15801561395857600080fd5b505af115801561221e573d6000803e3d6000fd5b60028160200151600281111561398457613984614723565b036117ed57805160408083015160608401519151637921219560e11b81526001600160a01b03878116600483015286811660248301526044820192909252606481019290925260a06084830152600060a48301529091169063f242432a9060c40161393e565b6060600080856001600160a01b031685604051613a079190615484565b600060405180830381855af49150503d8060008114613a42576040519150601f19603f3d011682016040523d82523d6000602084013e613a47565b606091505b5091509150613a5886838387613fbb565b9695505050505050565b600181602001516002811115613a7a57613a7a614723565b03613b245780516040516301ffc9a760e01b81526001600160a01b03909116906301ffc9a790613ab2906380ac58cd906004016154a0565b602060405180830381865afa925050508015613aeb575060408051601f3d908101601f19168201909252613ae8918101906154b8565b60015b613b075760405162461bcd60e51b8152600401610290906154d5565b80610e875760405162461bcd60e51b8152600401610290906154d5565b600281602001516002811115613b3c57613b3c614723565b03613b745780516040516301ffc9a760e01b81526001600160a01b03909116906301ffc9a790613ab29063d9b67a26906004016154a0565b600081602001516002811115613b8c57613b8c614723565b03610cde5780516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610cde5780516040516301ffc9a760e01b81526001600160a01b03909116906301ffc9a790613be9906380ac58cd906004016154a0565b602060405180830381865afa925050508015613c22575060408051601f3d908101601f19168201909252613c1f918101906154b8565b60015b613c4b57613c2e615316565b806308c379a003610e875750613c42615331565b80610e87575050565b8015613c695760405162461bcd60e51b8152600401610290906154d5565b81516040516301ffc9a760e01b81526001600160a01b03909116906301ffc9a790613c9c9063d9b67a26906004016154a0565b602060405180830381865afa925050508015613cd5575060408051601f3d908101601f19168201909252613cd2918101906154b8565b60015b613cff57613ce1615316565b806308c379a0036117ed5750613cf5615331565b806117ed57505050565b80156117ed5760405162461bcd60e51b8152600401610290906154d5565b8180613d555760405162461bcd60e51b815260206004820152600760248201526621546f6b656e7360c81b6044820152606401610290565b60008281526003602052604090205415613d9d5760405162461bcd60e51b815260206004820152600960248201526869642065786973747360b81b6044820152606401610290565b60005b81811015613e3157613dd8858583818110613dbd57613dbd614e59565b905060800201803603810190613dd39190615126565b613a62565b848482818110613dea57613dea614e59565b60008681526003602090815260408083208784526002019091529020608090910292909201919050613e1c82826154f9565b50613e2a9050600182614e85565b9050613da0565b50600091825260036020526040909120555050565b60008181526003602052604090206001016117ed8382614f6f565b60d3610e878282614f6f565b8115610e155773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03861601613faf57306001600160a01b03851603613f1257604051632e1a7d4d60e01b8152600481018390526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b158015613eea57600080fd5b505af1158015613efe573d6000803e3d6000fd5b50505050613f0d838383614032565b610e15565b306001600160a01b03841603613fa457348214613f4b576040516303e085f960e01b815234600482015260248101839052604401610290565b806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613f8657600080fd5b505af1158015613f9a573d6000803e3d6000fd5b5050505050610e15565b613f0d838383614032565b610e15858585856140f7565b6060831561402857825160000361402157613fd585612574565b6140215760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610290565b5081610cea565b610cea838361414f565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461407f576040519150601f19603f3d011682016040523d82523d6000602084013e614084565b606091505b5050905080612cdc57816001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156140c857600080fd5b505af11580156140dc573d6000803e3d6000fd5b50612cdc935050506001600160a01b0384169050858561415f565b816001600160a01b0316836001600160a01b03160315612cdc57306001600160a01b0384160361413a576141356001600160a01b038516838361415f565b612cdc565b612cdc6001600160a01b0385168484846141b5565b8151156134945781518083602001fd5b6117ed8363a9059cbb60e01b848460405160240161417e929190614791565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526141d6565b612cdc846323b872dd60e01b85858560405160240161417e93929190615460565b600061422b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166142a89092919063ffffffff16565b8051909150156117ed578080602001905181019061424991906154b8565b6117ed5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610290565b6060610cea848460008585600080866001600160a01b031685876040516142cf9190615484565b60006040518083038185875af1925050503d806000811461430c576040519150601f19603f3d011682016040523d82523d6000602084013e614311565b606091505b509150915061432287838387613fbb565b979650505050505050565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b6001600160a01b0381168114610cde57600080fd5b803561437681614356565b919050565b6000806040838503121561438e57600080fd5b823561439981614356565b946020939093013593505050565b6001600160e01b031981168114610cde57600080fd5b6000602082840312156143cf57600080fd5b8135612e93816143a7565b60005b838110156143f55781810151838201526020016143dd565b50506000910152565b600081518084526144168160208601602086016143da565b601f01601f19169290920160200192915050565b602081526000612e9360208301846143fe565b60008083601f84011261444f57600080fd5b5081356001600160401b0381111561446657600080fd5b6020830191508360208260071b850101111561448157600080fd5b9250929050565b60008083601f84011261449a57600080fd5b5081356001600160401b038111156144b157600080fd5b6020830191508360208260051b850101111561448157600080fd5b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715614507576145076144cc565b6040525050565b600082601f83011261451f57600080fd5b81356001600160401b03811115614538576145386144cc565b60405161454f601f8301601f1916602001826144e2565b81815284602083860101111561456457600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160801b038116811461437657600080fd5b60008060008060008060008060c0898b0312156145b457600080fd5b88356001600160401b03808211156145cb57600080fd5b6145d78c838d0161443d565b909a50985060208b01359150808211156145f057600080fd5b6145fc8c838d01614488565b909850965060408b013591508082111561461557600080fd5b506146228b828c0161450e565b94505061463160608a01614581565b925061463f60808a01614581565b915060a089013561464f81614356565b809150509295985092959890939650565b60006020828403121561467257600080fd5b5035919050565b60006020828403121561468b57600080fd5b8135612e9381614356565b600080600080608085870312156146ac57600080fd5b84356146b781614356565b935060208501356146c781614356565b92506040850135915060608501356001600160401b038111156146e957600080fd5b6146f58782880161450e565b91505092959194509250565b6000806040838503121561471457600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b80516001600160a01b0316825260208101516003811061476957634e487b7160e01b600052602160045260246000fd5b602083015260408181015190830152606090810151910152565b608081016109fe8284614739565b6001600160a01b03929092168252602082015260400190565b60006001600160401b038211156147c3576147c36144cc565b5060051b60200190565b600082601f8301126147de57600080fd5b813560206147eb826147aa565b6040516147f882826144e2565b80915083815260208101915060208460051b87010193508684111561481c57600080fd5b602086015b848110156148385780358352918301918301614821565b509695505050505050565b600080600080600060a0868803121561485b57600080fd5b853561486681614356565b9450602086013561487681614356565b935060408601356001600160401b038082111561489257600080fd5b61489e89838a016147cd565b945060608801359150808211156148b457600080fd5b6148c089838a016147cd565b935060808801359150808211156148d657600080fd5b506148e38882890161450e565b9150509295509295909350565b6000806040838503121561490357600080fd5b82359150602083013561491581614356565b809150509250929050565b600082601f83011261493157600080fd5b8135602061493e826147aa565b60405161494b82826144e2565b80915083815260208101915060208460051b87010193508684111561496f57600080fd5b602086015b8481101561483857803561498781614356565b8352918301918301614974565b600080604083850312156149a757600080fd5b82356001600160401b03808211156149be57600080fd5b6149ca86838701614920565b935060208501359150808211156149e057600080fd5b506149ed858286016147cd565b9150509250929050565b60008151808452602080850194506020840160005b83811015614a2857815187529582019590820190600101614a0c565b509495945050505050565b602081526000612e9360208301846149f7565b600080600080600080600060e0888a031215614a6157600080fd5b614a6a8861436b565b965060208801356001600160401b0380821115614a8657600080fd5b614a928b838c0161450e565b975060408a0135915080821115614aa857600080fd5b614ab48b838c0161450e565b965060608a0135915080821115614aca57600080fd5b614ad68b838c0161450e565b955060808a0135915080821115614aec57600080fd5b50614af98a828b01614920565b935050614b0860a0890161436b565b915060c0880135905092959891949750929550565b60008151808452602080850194506020840160005b83811015614a2857614b45878351614739565b6080969096019590820190600101614b32565b604081526000614b6b6040830185614b1d565b8281036020840152614b7d81856149f7565b95945050505050565b602081526000612e936020830184614b1d565b600060208284031215614bab57600080fd5b81356001600160401b03811115614bc157600080fd5b610cea8482850161450e565b600080600060608486031215614be257600080fd5b833592506020840135614bf481614356565b929592945050506040919091013590565b8015158114610cde57600080fd5b60008060408385031215614c2657600080fd5b8235614c3181614356565b9150602083013561491581614c05565b60008060008060008060808789031215614c5a57600080fd5b8635955060208701356001600160401b0380821115614c7857600080fd5b614c848a838b0161443d565b90975095506040890135915080821115614c9d57600080fd5b50614caa89828a01614488565b9094509250506060870135614cbe81614356565b809150509295509295509295565b60008060208385031215614cdf57600080fd5b82356001600160401b03811115614cf557600080fd5b614d0185828601614488565b90969095509350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614d6457603f19888603018452614d528583516143fe565b94509285019290850190600101614d36565b5092979650505050505050565b60008060408385031215614d8457600080fd5b8235614d8f81614356565b9150602083013561491581614356565b600080600080600060a08688031215614db757600080fd5b8535614dc281614356565b94506020860135614dd281614356565b9350604086013592506060860135915060808601356001600160401b03811115614dfb57600080fd5b6148e38882890161450e565b600181811c90821680614e1b57607f821691505b602082108103611c5757634e487b7160e01b600052602260045260246000fd5b60208082526004908201526310a632b760e11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156109fe576109fe614e6f565b80820281158282048414176109fe576109fe614e6f565b634e487b7160e01b600052601260045260246000fd5b600082614ed457614ed4614eaf565b500490565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b601f8211156117ed576000816000526020600020601f850160051c81016020861015614f505750805b601f850160051c820191505b8181101561247157828155600101614f5c565b81516001600160401b03811115614f8857614f886144cc565b614f9c81614f968454614e07565b84614f27565b602080601f831160018114614fd15760008415614fb95750858301515b600019600386901b1c1916600185901b178555612471565b600085815260208120601f198616915b8281101561500057888601518255948401946001909101908401614fe1565b508582101561501e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252600490820152630850985b60e21b604082015260600190565b828152604060208201526000610cea6040830184614b1d565b6000808335601e1984360301811261507c57600080fd5b8301803591506001600160401b0382111561509657600080fd5b60200191503681900382131561448157600080fd5b8284823760609190911b6001600160601b0319169101908152601401919050565b6000826150db576150db614eaf565b500690565b60208082526002908201526110a960f11b604082015260600190565b60038110610cde57600080fd5b60006020828403121561511b57600080fd5b8135612e93816150fc565b60006080828403121561513857600080fd5b604051608081018181106001600160401b038211171561515a5761515a6144cc565b604052823561516881614356565b81526020830135615178816150fc565b6020820152604083810135908201526060928301359281019290925250919050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000614b6b60408301856149f7565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60408152600061529a60408301856143fe565b8281036020840152614b7d81856143fe565b818103818111156109fe576109fe614e6f565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614322908301846143fe565b60006020828403121561530b57600080fd5b8151612e93816143a7565b600060033d1115612ff15760046000803e5060005160e01c90565b600060443d101561533f5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561536e57505050505090565b82850191508151818111156153865750505050505090565b843d87010160208285010111156153a05750505050505090565b6153af602082860101876144e2565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061542e908301866149f7565b828103606084015261544081866149f7565b9050828103608084015261545481856143fe565b98975050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600082516154968184602087016143da565b9190910192915050565b60e09190911b6001600160e01b031916815260200190565b6000602082840312156154ca57600080fd5b8151612e9381614c05565b6020808252600a908201526921546f6b656e5479706560b01b604082015260600190565b813561550481614356565b81546001600160a01b031981166001600160a01b039290921691821783556020840135615530816150fc565b6003811061554e57634e487b7160e01b600052602160045260246000fd5b6001600160a81b03199190911690911760a09190911b60ff60a01b161781556040820135600182015560609091013560029091015556fe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6cc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286d5cf0a6bdc8d859ba3bdc97043337c82a0e609035f378e419298b6a3e00ae6416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122099f746b9bdf4e1c68172ece90a21c54ce239b83ba4ce248874777f9979b9d00564736f6c6343000817003300000000000000000000000081e609b897393731a3d23c1d311330340cebb9e9