[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_tbaContract", "type": "address" }, { "internalType": "address", "name": "_erc6551AccountContract", "type": "address" }, { "internalType": "address", "name": "_baseNFTContract", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "BaseNFTLocked", "type": "error" }, { "inputs": [], "name": "CreatorTokenBase__InvalidTransferValidatorContract", "type": "error" }, { "inputs": [], "name": "CreatorTokenBase__SetTransferValidatorFirst", "type": "error" }, { "inputs": [], "name": "InvalidLength", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "baseNftCharacterIdentifier", "type": "uint256" }, { "internalType": "uint256", "name": "partsNftCharacterIdentifier", "type": "uint256" } ], "name": "NotMatchCharacterIdentifier", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "invalidOwner", "type": "address" } ], "name": "NotOwner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NotRevealed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "tbaAddress", "type": "address" } ], "name": "NotTBAAccount", "type": "error" }, { "inputs": [], "name": "ShouldNotMintToBurnAddress", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "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": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "partsIdentifier", "type": "string" } ], "name": "PartsReveal", "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": "uint256", "name": "baseNftTokenId", "type": "uint256" } ], "name": "SetParts", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldValidator", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValidator", "type": "address" } ], "name": "TransferValidatorUpdated", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_OPERATOR_WHITELIST_ID", "outputs": [ { "internalType": "uint120", "name": "", "type": "uint120" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_TRANSFER_SECURITY_LEVEL", "outputs": [ { "internalType": "enum TransferSecurityLevels", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_TRANSFER_VALIDATOR", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "OPERATOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseNFTContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "bulkMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "baseNftTokenId", "type": "uint256" } ], "name": "bundleMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "baseNftTokenId", "type": "uint256" }, { "internalType": "uint256[3]", "name": "tokenIds", "type": "uint256[3]" }, { "internalType": "string[3]", "name": "partsIdentifiers", "type": "string[3]" } ], "name": "bundleReveal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tbaAddress", "type": "address" }, { "internalType": "address", "name": "eoaAddress", "type": "address" }, { "internalType": "uint256", "name": "addTokenId", "type": "uint256" }, { "internalType": "uint256", "name": "removeTokenId", "type": "uint256" }, { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes32", "name": "adminHash", "type": "bytes32" }, { "internalType": "bytes", "name": "adminSignature", "type": "bytes" } ], "name": "changeParts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "erc6551AccountContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPermittedContractReceivers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSecurityPolicy", "outputs": [ { "components": [ { "internalType": "enum TransferSecurityLevels", "name": "transferSecurityLevel", "type": "uint8" }, { "internalType": "uint120", "name": "operatorWhitelistId", "type": "uint120" }, { "internalType": "uint120", "name": "permittedContractReceiversId", "type": "uint120" } ], "internalType": "struct CollectionSecurityPolicy", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTransferValidator", "outputs": [ { "internalType": "contract ICreatorTokenTransferValidator", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getWhitelistedOperators", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "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": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "isContractReceiverPermitted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isOperatorWhitelisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "isRevealed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "isSetBaseNFT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "isTransferAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "partsIdentifier", "type": "string" }, { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "reveal", "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": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "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": "enum TransferSecurityLevels", "name": "level", "type": "uint8" }, { "internalType": "uint120", "name": "operatorWhitelistId", "type": "uint120" }, { "internalType": "uint120", "name": "permittedContractReceiversAllowlistId", "type": "uint120" } ], "name": "setToCustomSecurityPolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "validator", "type": "address" }, { "internalType": "enum TransferSecurityLevels", "name": "level", "type": "uint8" }, { "internalType": "uint120", "name": "operatorWhitelistId", "type": "uint120" }, { "internalType": "uint120", "name": "permittedContractReceiversAllowlistId", "type": "uint120" } ], "name": "setToCustomValidatorAndSecurityPolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setToDefaultSecurityPolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "transferValidator_", "type": "address" } ], "name": "setTransferValidator", "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": [], "name": "tbaContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tbaOwnParts", "outputs": [ { "internalType": "bool", "name": "head", "type": "bool" }, { "internalType": "bool", "name": "body", "type": "bool" }, { "internalType": "bool", "name": "face", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tokenParts", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "nftContract", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "verifySignature", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b506040516200489d3803806200489d833981016040819052620000349162000320565b84846040518060200160405280600081525060405180602001604052806000815250816000908162000067919062000452565b50600162000076828262000452565b5050506200008b82826200012260201b60201c565b506200009990503362000144565b620000a660003362000196565b620000c16000805160206200487d8339815191523362000196565b620000dc6000805160206200487d8339815191528262000196565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055506200051e9050565b600662000130838262000452565b5060076200013f828262000452565b505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008281526009602090815260408083206001600160a01b038516845290915290205460ff16620002375760008281526009602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001f63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026357600080fd5b81516001600160401b03808211156200028057620002806200023b565b604051601f8301601f19908116603f01168101908282118183101715620002ab57620002ab6200023b565b8160405283815260209250866020858801011115620002c957600080fd5b600091505b83821015620002ed5785820183015181830184015290820190620002ce565b6000602085830101528094505050505092915050565b80516001600160a01b03811681146200031b57600080fd5b919050565b600080600080600060a086880312156200033957600080fd5b85516001600160401b03808211156200035157600080fd5b6200035f89838a0162000251565b965060208801519150808211156200037657600080fd5b50620003858882890162000251565b945050620003966040870162000303565b9250620003a66060870162000303565b9150620003b66080870162000303565b90509295509295909350565b600181811c90821680620003d757607f821691505b602082108103620003f857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200013f576000816000526020600020601f850160051c81016020861015620004295750805b601f850160051c820191505b818110156200044a5782815560010162000435565b505050505050565b81516001600160401b038111156200046e576200046e6200023b565b62000486816200047f8454620003c2565b84620003fe565b602080601f831160018114620004be5760008415620004a55750858301515b600019600386901b1c1916600185901b1785556200044a565b600085815260208120601f198616915b82811015620004ef57888601518255948401946001909101908401620004ce565b50858210156200050e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61434f806200052e6000396000f3fe608060405234801561001057600080fd5b506004361061030b5760003560e01c80636352211e1161019d578063aafdda18116100e9578063d547741f116100a2578063f2fde38b1161007c578063f2fde38b14610777578063f5b541a61461078a578063f9767c2b1461079f578063fd762d92146107b257600080fd5b8063d547741f14610705578063e4a13d3014610718578063e985e9c51461073b57600080fd5b8063aafdda181461069c578063b88d4fde146106af578063be537f43146106c2578063c341be58146106d7578063c87b56dd146106ea578063d007af5c146106fd57600080fd5b80638da5cb5b116101565780639d645a44116101305780639d645a441461065b578063a217fddf1461066e578063a22cb46514610676578063a9fc664e1461068957600080fd5b80638da5cb5b1461062f57806391d148541461064057806395d89b411461065357600080fd5b80636352211e146105d35780636a627842146105e65780636c3b8699146105f95780636cdde1bc1461060157806370a0823114610614578063715018a61461062757600080fd5b806323b872dd1161025c5780633771aaa111610215578063495c8bf9116101ef578063495c8bf9146105685780635055fbc31461057d5780635d4c1d46146105a057806361347162146105c057600080fd5b80633771aaa11461052f57806342842e0e1461054257806342966c681461055557600080fd5b806323b872dd1461049f578063248a9ca3146104b25780632a4501d2146104e35780632e8da829146104f65780632f2ff15d1461050957806336568abe1461051c57600080fd5b8063098144d4116102c95780631b25b077116102a35780631b25b077146104325780631c33b328146104455780631e7789c51461045a5780631f3131451461046d57600080fd5b8063098144d4146103b95780630a0a939c146103ca578063103047201461041f57600080fd5b8062e52f1d14610310578063014635461461032557806301ffc9a71461035b57806306fdde031461037e578063081812fc14610393578063095ea7b3146103a6575b600080fd5b61032361031e366004613470565b6107c5565b005b61033e71721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b61036e6103693660046134dd565b61083a565b6040519015158152602001610352565b610386610865565b604051610352919061354a565b61033e6103a136600461355d565b610874565b6103236103b436600461358b565b61089b565b6008546001600160a01b031661033e565b6104006103d83660046135b7565b60126020526000908152604090205460ff808216916101008104821691620100009091041683565b6040805193151584529115156020840152151590820152606001610352565b600d5461033e906001600160a01b031681565b61036e6104403660046135d4565b6109b5565b61044d600181565b6040516103529190613641565b61032361046836600461358b565b610a4e565b61048061047b366004613697565b610ae6565b604080516001600160a01b039093168352901515602083015201610352565b6103236104ad366004613700565b610bf4565b6104d56104c036600461355d565b60009081526009602052604090206001015490565b604051908152602001610352565b6103866104f136600461355d565b610c26565b61036e6105043660046135b7565b610cc0565b610323610517366004613741565b610dcc565b61032361052a366004613741565b610df1565b61032361053d366004613771565b610e6f565b610323610550366004613700565b610ee6565b61032361056336600461355d565b610f01565b610570610f32565b60405161035291906137e5565b61036e61058b36600461355d565b60106020526000908152604090205460ff1681565b6105a8600181565b6040516001600160781b039091168152602001610352565b6103236105ce366004613854565b61103e565b61033e6105e136600461355d565b6111a9565b6103236105f43660046135b7565b611209565b610323611243565b61032361060f366004613894565b611336565b6104d56106223660046135b7565b6113f5565b61032361147b565b600a546001600160a01b031661033e565b61036e61064e366004613741565b61148f565b6103866114ba565b61036e6106693660046135b7565b6114c4565b6104d5600081565b610323610684366004613924565b61158c565b6103236106973660046135b7565b611597565b6103236106aa366004613952565b6116b8565b6103236106bd366004613a7d565b611859565b6106ca61188b565b6040516103529190613b2b565b600c5461033e906001600160a01b031681565b6103866106f836600461355d565b611946565b6105706119b9565b610323610713366004613741565b611a72565b61036e61072636600461355d565b60116020526000908152604090205460ff1681565b61036e610749366004613b67565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103236107853660046135b7565b611a97565b6104d56000805160206142d883398151915281565b600e5461033e906001600160a01b031681565b6103236107c0366004613b95565b611b0d565b6000805160206142d88339815191526107dd81611c0c565b60005b60038110156108335761082b858583600381106107ff576107ff613bf1565b602002013585846003811061081657610816613bf1565b6020028101906108269190613c07565b611c16565b6001016107e0565b5050505050565b60006001600160e01b031982166356e2ed0d60e11b148061085f575061085f82611d42565b92915050565b606061086f611d67565b905090565b600061087f82611df9565b506000908152600460205260409020546001600160a01b031690565b60006108a6826111a9565b9050806001600160a01b0316836001600160a01b0316036109185760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061093457506109348133610749565b6109a65760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161090f565b6109b08383611e58565b505050565b6008546000906001600160a01b031615610a435760085460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b158015610a1e57600080fd5b505afa925050508015610a2f575060015b610a3b57506000610a47565b506001610a47565b5060015b9392505050565b6000805160206142d8833981519152610a6681611c0c565b60005b6003811015610ae0576000600b60008154610a8390613c63565b91829055509050610a948582611ec6565b600081815260116020526040808220805460ff1916600117905551859183917f0825340d5da54e9cf10b35df3d6e4fd771e9c22476b44f08acf2bfc558aa87699190a350600101610a69565b50505050565b6000806000610b1a866020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b90506000610b5e8287878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ee092505050565b905080816001600160a01b03168a6001600160a01b0316636352211e8b6040518263ffffffff1660e01b8152600401610b9991815260200190565b602060405180830381865afa158015610bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bda9190613c7c565b6001600160a01b0316149350935050509550959350505050565b610bff335b82611f71565b610c1b5760405162461bcd60e51b815260040161090f90613c99565b6109b0838383611ff0565b600f6020526000908152604090208054610c3f90613ce6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6b90613ce6565b8015610cb85780601f10610c8d57610100808354040283529160200191610cb8565b820191906000526020600020905b815481529060010190602001808311610c9b57829003601f168201915b505050505081565b6008546000906001600160a01b031615610dc457600854604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b955455290602401606060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d489190613d20565b602001516040516001600160e01b031960e084901b1681526001600160781b0390911660048201526001600160a01b03851660248201526044015b602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190613d91565b506000919050565b600082815260096020526040902060010154610de781611c0c565b6109b08383612169565b6001600160a01b0381163314610e615760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161090f565b610e6b82826121ef565b5050565b6000805160206142d8833981519152610e8781611c0c565b6064821115610ea95760405163251f56a160e21b815260040160405180910390fd5b60005b82811015610ae057610ede848483818110610ec957610ec9613bf1565b90506020020160208101906105f491906135b7565b600101610eac565b6109b083838360405180602001604052806000815250611859565b610f0a33610bf9565b610f265760405162461bcd60e51b815260040161090f90613c99565b610f2f81612256565b50565b6008546060906001600160a01b03161561102b57600854604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b955455290602401606060405180830381865afa158015610f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fba9190613d20565b602001516040516001600160e01b031960e084901b1681526001600160781b0390911660048201526024015b600060405180830381865afa158015611003573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086f9190810190613dae565b5060408051600081526020810190915290565b611046612303565b600061105a6008546001600160a01b031690565b90506001600160a01b03811661108357604051631cffe3dd60e11b815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c0906110b19030908890600401613e5f565b600060405180830381600087803b1580156110cb57600080fd5b505af11580156110df573d6000803e3d6000fd5b5050604051631182550160e11b81526001600160a01b0384169250632304aa0291506111119030908790600401613e7c565b600060405180830381600087803b15801561112b57600080fd5b505af115801561113f573d6000803e3d6000fd5b505060405163235d10c560e21b81526001600160a01b0384169250638d74431491506111719030908690600401613e7c565b600060405180830381600087803b15801561118b57600080fd5b505af115801561119f573d6000803e3d6000fd5b5050505050505050565b6000818152600260205260408120546001600160a01b03168061085f5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161090f565b6000805160206142d883398151915261122181611c0c565b6000600b6000815461123290613c63565b918290555090506109b08382611ec6565b61124b612303565b61126671721c310194ccfc01e523fc93c9cccfa2a0ac611597565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c09061129e903090600190600401613e5f565b600060405180830381600087803b1580156112b857600080fd5b505af11580156112cc573d6000803e3d6000fd5b5050604051631182550160e11b815271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150611308903090600190600401613e7c565b600060405180830381600087803b15801561132257600080fd5b505af1158015610ae0573d6000803e3d6000fd5b8583838360008061134a3087878787610ae6565b915091508061137e5760405163b9c0876160e01b8152600481018790526001600160a01b038316602482015260440161090f565b60008c8152601060209081526040808320805460ff19166001179055600f90915290206113ac8b8d83613eee565b508b7fb900a334b7feb56efef760c734b4fbb8f6ab2e193537a3e225ac55615f4eb0bb8c8c6040516113df929190613fd6565b60405180910390a2505050505050505050505050565b60006001600160a01b03821661145f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161090f565b506001600160a01b031660009081526003602052604090205490565b611483612307565b61148d6000612361565b565b60009182526009602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606061086f6123b3565b6008546000906001600160a01b031615610dc457600854604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b955455290602401606060405180830381865afa158015611528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c9190613d20565b60409081015190516001600160e01b031960e084901b1681526001600160781b0390911660048201526001600160a01b0385166024820152604401610d83565b610e6b3383836123c2565b61159f612303565b60006001600160a01b0382163b1561161a576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa925050508015611612575060408051601f3d908101601f1916820190925261160f91810190613d91565b60015b1561161a5790505b6001600160a01b03821615801590611630575080155b1561164e576040516332483afb60e01b815260040160405180910390fd5b600854604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000805160206142d88339815191526116d081611c0c565b600c54604051632f2e037160e11b81526001600160a01b038d8116600483015290911690635e5c06e290602401602060405180830381865afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e9190613d91565b61176657604051638d1cb68360e01b81526001600160a01b038c16600482015260240161090f565b600080611776308c8b8b8b610ae6565b91509150806117aa5760405163b9c0876160e01b8152600481018c90526001600160a01b038316602482015260440161090f565b6117b4338c611e58565b6117be338b611e58565b8c6001600160a01b031663beb702ba308e8d60008b8b8b6040518863ffffffff1660e01b81526004016117f79796959493929190613fea565b6000604051808303816000875af1158015611816573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261183e919081019061403b565b5061184a8c8e8d610bf4565b50505050505050505050505050565b6118633383611f71565b61187f5760405162461bcd60e51b815260040161090f90613c99565b610ae084848484612490565b60408051606081018252600080825260208201819052918101919091526008546001600160a01b03161561192557600854604051635caaa2a960e11b81523060048201526001600160a01b039091169063b955455290602401606060405180830381865afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190613d20565b50604080516060810182526000808252602082018190529181019190915290565b606061195182611df9565b600061196860408051602081019091526000815290565b905060008151116119885760405180602001604052806000815250610a47565b80611992846124c3565b6040516020016119a39291906140b1565b6040516020818303038152906040529392505050565b6008546060906001600160a01b03161561102b57600854604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b955455290602401606060405180830381865afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a419190613d20565b60409081015190516001600160e01b031960e084901b1681526001600160781b039091166004820152602401610fe6565b600082815260096020526040902060010154611a8d81611c0c565b6109b083836121ef565b611a9f612307565b6001600160a01b038116611b045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090f565b610f2f81612361565b611b15612303565b611b1e84611597565b604051630368065360e61b81526001600160a01b0385169063da0194c090611b4c9030908790600401613e5f565b600060405180830381600087803b158015611b6657600080fd5b505af1158015611b7a573d6000803e3d6000fd5b5050604051631182550160e11b81526001600160a01b0387169250632304aa029150611bac9030908690600401613e7c565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611bda573d6000803e3d6000fd5b505060405163235d10c560e21b81526001600160a01b0387169250638d74431491506111719030908590600401613e7c565b610f2f8133612556565b600c5460405163b5eff1fb60e01b8152600481018690526000916001600160a01b03169063b5eff1fb90602401602060405180830381865afa158015611c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c849190613c7c565b9050611c8f846111a9565b6001600160a01b0316816001600160a01b031614611cd25760405163b9c0876160e01b8152600481018590526001600160a01b038216602482015260440161090f565b6000848152601060209081526040808320805460ff19166001179055600f9091529020611d00838583613eee565b50837fb900a334b7feb56efef760c734b4fbb8f6ab2e193537a3e225ac55615f4eb0bb8484604051611d33929190613fd6565b60405180910390a25050505050565b60006001600160e01b03198216637965db0b60e01b148061085f575061085f826125af565b606060068054611d7690613ce6565b80601f0160208091040260200160405190810160405280929190818152602001828054611da290613ce6565b8015611def5780601f10611dc457610100808354040283529160200191611def565b820191906000526020600020905b815481529060010190602001808311611dd257829003601f168201915b5050505050905090565b6000818152600260205260409020546001600160a01b0316610f2f5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161090f565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e8d826111a9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610e6b8282604051806020016040528060008152506125d4565b6040516001908360005260208301516040526040835103611f1c57604083015160ff81901c601b016020526001600160ff1b0316606052611f42565b6041835103611f3d57606083015160001a6020526040830151606052611f42565b600091505b6020600160806000855afa5191503d611f6357638baa579f6000526004601cfd5b600060605260405292915050565b600080611f7d836111a9565b9050806001600160a01b0316846001600160a01b03161480611fc457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80611fe85750836001600160a01b0316611fdd84610874565b6001600160a01b0316145b949350505050565b826001600160a01b0316612003826111a9565b6001600160a01b0316146120295760405162461bcd60e51b815260040161090f906140e0565b6001600160a01b03821661208b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161090f565b6120988383836001612607565b826001600160a01b03166120ab826111a9565b6001600160a01b0316146120d15760405162461bcd60e51b815260040161090f906140e0565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46109b083838360016128f4565b612173828261148f565b610e6b5760008281526009602090815260408083206001600160a01b03851684529091529020805460ff191660011790556121ab3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6121f9828261148f565b15610e6b5760008281526009602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000612261826111a9565b9050612271816000846001612607565b61227a826111a9565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610e6b8160008460016128f4565b61148d5b600a546001600160a01b0316331461148d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060078054611d7690613ce6565b816001600160a01b0316836001600160a01b0316036124235760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161090f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61249b848484611ff0565b6124a7848484846129b3565b610ae05760405162461bcd60e51b815260040161090f90614125565b606060006124d083612ab4565b60010190506000816001600160401b038111156124ef576124ef613a10565b6040519080825280601f01601f191660200182016040528015612519576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612523575b509392505050565b612560828261148f565b610e6b5761256d81612b8c565b612578836020612b9e565b604051602001612589929190614177565b60408051601f198184030181529082905262461bcd60e51b825261090f9160040161354a565b60006001600160e01b031982166310c8aba560e31b148061085f575061085f82612d39565b6125de8383612d89565b6125eb60008484846129b3565b6109b05760405162461bcd60e51b815260040161090f90614125565b60005b81811015610833576001600160a01b0385161561083357600061262d82856141ec565b90506126596040518060600160405280602281526020016142f86022913961265488612f2c565b61300c565b61266286612f2c565b156126805760405163f46b421d60e01b815260040160405180910390fd5b60008181526011602052604090205460ff1680156126ad575060008181526010602052604090205460ff16155b156126ce576040516330dbe9f360e21b81526004810182905260240161090f565b6126d9868683613051565b60006126e4866130a7565b905080156128ea576000828152600f602052604081208054829161278e9161270b90613ce6565b80601f016020809104026020016040519081016040528092919081815260200182805461273790613ce6565b80156127845780601f1061275957610100808354040283529160200191612784565b820191906000526020600020905b81548152906001019060200180831161276757829003601f168201915b50505050506130da565b5091509150600061279e82613253565b905060006127ab84613253565b600e5460405163722f332f60e11b8152600481018390529192506000916001600160a01b039091169063e45e665e90602401602060405180830381865afa1580156127fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281e91906141ff565b905081811461284a57604051639efe3dcd60e01b8152600481018290526024810183905260440161090f565b8260010361287d576001600160a01b038b1660009081526012602052604090205460ff161561287857600080fd5b6128e4565b826002036128b0576001600160a01b038b16600090815260126020526040902054610100900460ff161561287857600080fd5b826003036128e4576001600160a01b038b1660009081526012602052604090205462010000900460ff16156128e457600080fd5b50505050505b505060010161260a565b60005b81811015610833576001600160a01b0385161561083357612922858561291d84876141ec565b6132c3565b600061292d856130a7565b90508015612972576000612960600f8261294786896141ec565b8152602001908152602001600020805461270b90613ce6565b509150506129708682600161330a565b505b600061297d876130a7565b905080156129a9576000612997600f82612947878a6141ec565b509150506129a78882600061330a565b505b50506001016128f7565b60006001600160a01b0384163b15612aa957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906129f7903390899088908890600401614218565b6020604051808303816000875af1925050508015612a32575060408051601f3d908101601f19168201909252612a2f91810190614255565b60015b612a8f573d808015612a60576040519150601f19603f3d011682016040523d82523d6000602084013e612a65565b606091505b508051600003612a875760405162461bcd60e51b815260040161090f90614125565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611fe8565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612af35772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612b1f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612b3d57662386f26fc10000830492506010015b6305f5e1008310612b55576305f5e100830492506008015b6127108310612b6957612710830492506004015b60648310612b7b576064830492506002015b600a831061085f5760010192915050565b606061085f6001600160a01b03831660145b60606000612bad836002614272565b612bb89060026141ec565b6001600160401b03811115612bcf57612bcf613a10565b6040519080825280601f01601f191660200182016040528015612bf9576020820181803683370190505b509050600360fc1b81600081518110612c1457612c14613bf1565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c4357612c43613bf1565b60200101906001600160f81b031916908160001a9053506000612c67846002614272565b612c729060016141ec565b90505b6001811115612cea576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ca657612ca6613bf1565b1a60f81b828281518110612cbc57612cbc613bf1565b60200101906001600160f81b031916908160001a90535060049490941c93612ce381614289565b9050612c75565b508315610a475760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161090f565b60006001600160e01b031982166380ac58cd60e01b1480612d6a57506001600160e01b03198216635b5e139f60e01b145b8061085f57506301ffc9a760e01b6001600160e01b031983161461085f565b6001600160a01b038216612ddf5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161090f565b6000818152600260205260409020546001600160a01b031615612e445760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161090f565b612e52600083836001612607565b6000818152600260205260409020546001600160a01b031615612eb75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161090f565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610e6b6000838360016128f4565b600c5460405163de21a48960e01b81526001600160a01b038381166004830152600092839291169063de21a48990602401602060405180830381865afa158015612f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9e91906141ff565b600e5460405163d68f4dd160e01b8152600481018390529192506001600160a01b03169063d68f4dd190602401602060405180830381865afa158015612fe8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a479190613d91565b610e6b82826040516024016130229291906142a0565b60408051601f198184030181529190526020810180516001600160e01b031663c3b5563560e01b1790526133b9565b6001600160a01b03838116159083161581801561306b5750805b1561308957604051635cbd944160e01b815260040160405180910390fd5b8115613095575b610833565b806130905761083333868686346133da565b600c54604051632f2e037160e11b81526001600160a01b0383811660048301526000921690635e5c06e290602401610d83565b606080606083516004146131475760405162461bcd60e51b815260206004820152602e60248201527f496e70757420737472696e67206d7573742062652065786163746c792034206360448201526d686172616374657273206c6f6e6760901b606482015260840161090f565b600084905060008160008151811061316157613161613bf1565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405290506000826001815181106131a7576131a7613bf1565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405290506000836002815181106131ed576131ed613bf1565b602001015160f81c60f81b8460038151811061320b5761320b613bf1565b016020908101516040516001600160f81b03199384169281019290925291909116602182015260220160408051808303601f1901815291905292989197509195509350505050565b60008181805b825181101561254e57600083828151811061327657613276613bf1565b016020015160f81c905060308110801590613292575060398111155b156132ba576132a26030826142c4565b6132ad84600a614272565b6132b791906141ec565b92505b50600101613259565b6001600160a01b0383811615908316158180156132dd5750805b156132fb57604051635cbd944160e01b815260040160405180910390fd5b81613090578061309057610833565b600061331583613253565b905080600103613348576001600160a01b0384166000908152601260205260409020805460ff1916831515179055610ae0565b8060020361337e576001600160a01b0384166000908152601260205260409020805461ff00191661010084151502179055610ae0565b80600303610ae0576001600160a01b03841660009081526012602052604090208054831515620100000262ff00001990911617905550505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6008546001600160a01b0316156108335760085460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561344057600080fd5b505afa158015613454573d6000803e3d6000fd5b505050505050505050565b806060810183101561085f57600080fd5b600080600060a0848603121561348557600080fd5b83359250613496856020860161345f565b915060808401356001600160401b038111156134b157600080fd5b6134bd8682870161345f565b9150509250925092565b6001600160e01b031981168114610f2f57600080fd5b6000602082840312156134ef57600080fd5b8135610a47816134c7565b60005b838110156135155781810151838201526020016134fd565b50506000910152565b600081518084526135368160208601602086016134fa565b601f01601f19169290920160200192915050565b602081526000610a47602083018461351e565b60006020828403121561356f57600080fd5b5035919050565b6001600160a01b0381168114610f2f57600080fd5b6000806040838503121561359e57600080fd5b82356135a981613576565b946020939093013593505050565b6000602082840312156135c957600080fd5b8135610a4781613576565b6000806000606084860312156135e957600080fd5b83356135f481613576565b9250602084013561360481613576565b9150604084013561361481613576565b809150509250925092565b6007811061363d57634e487b7160e01b600052602160045260246000fd5b9052565b6020810161085f828461361f565b60008083601f84011261366157600080fd5b5081356001600160401b0381111561367857600080fd5b60208301915083602082850101111561369057600080fd5b9250929050565b6000806000806000608086880312156136af57600080fd5b85356136ba81613576565b9450602086013593506040860135925060608601356001600160401b038111156136e357600080fd5b6136ef8882890161364f565b969995985093965092949392505050565b60008060006060848603121561371557600080fd5b833561372081613576565b9250602084013561373081613576565b929592945050506040919091013590565b6000806040838503121561375457600080fd5b82359150602083013561376681613576565b809150509250929050565b6000806020838503121561378457600080fd5b82356001600160401b038082111561379b57600080fd5b818501915085601f8301126137af57600080fd5b8135818111156137be57600080fd5b8660208260051b85010111156137d357600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156138265783516001600160a01b031683529284019291840191600101613801565b50909695505050505050565b60078110610f2f57600080fd5b6001600160781b0381168114610f2f57600080fd5b60008060006060848603121561386957600080fd5b833561387481613832565b925060208401356138848161383f565b915060408401356136148161383f565b600080600080600080608087890312156138ad57600080fd5b8635955060208701356001600160401b03808211156138cb57600080fd5b6138d78a838b0161364f565b90975095506040890135945060608901359150808211156138f757600080fd5b5061390489828a0161364f565b979a9699509497509295939492505050565b8015158114610f2f57600080fd5b6000806040838503121561393757600080fd5b823561394281613576565b9150602083013561376681613916565b6000806000806000806000806000806101008b8d03121561397257600080fd5b8a3561397d81613576565b995060208b013561398d81613576565b985060408b0135975060608b0135965060808b0135955060a08b01356001600160401b03808211156139be57600080fd5b6139ca8e838f0161364f565b909750955060c08d0135945060e08d01359150808211156139ea57600080fd5b506139f78d828e0161364f565b915080935050809150509295989b9194979a5092959850565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613a4e57613a4e613a10565b604052919050565b60006001600160401b03821115613a6f57613a6f613a10565b50601f01601f191660200190565b60008060008060808587031215613a9357600080fd5b8435613a9e81613576565b93506020850135613aae81613576565b92506040850135915060608501356001600160401b03811115613ad057600080fd5b8501601f81018713613ae157600080fd5b8035613af4613aef82613a56565b613a26565b818152886020838501011115613b0957600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000606082019050613b3e82845161361f565b60208301516001600160781b038082166020850152806040860151166040850152505092915050565b60008060408385031215613b7a57600080fd5b8235613b8581613576565b9150602083013561376681613576565b60008060008060808587031215613bab57600080fd5b8435613bb681613576565b93506020850135613bc681613832565b92506040850135613bd68161383f565b91506060850135613be68161383f565b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112613c1e57600080fd5b8301803591506001600160401b03821115613c3857600080fd5b60200191503681900382131561369057600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613c7557613c75613c4d565b5060010190565b600060208284031215613c8e57600080fd5b8151610a4781613576565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600181811c90821680613cfa57607f821691505b602082108103613d1a57634e487b7160e01b600052602260045260246000fd5b50919050565b600060608284031215613d3257600080fd5b604051606081018181106001600160401b0382111715613d5457613d54613a10565b6040528251613d6281613832565b81526020830151613d728161383f565b60208201526040830151613d858161383f565b60408201529392505050565b600060208284031215613da357600080fd5b8151610a4781613916565b60006020808385031215613dc157600080fd5b82516001600160401b0380821115613dd857600080fd5b818501915085601f830112613dec57600080fd5b815181811115613dfe57613dfe613a10565b8060051b9150613e0f848301613a26565b8181529183018401918481019088841115613e2957600080fd5b938501935b83851015613e535784519250613e4383613576565b8282529385019390850190613e2e565b98975050505050505050565b6001600160a01b038316815260408101610a47602083018461361f565b6001600160a01b039290921682526001600160781b0316602082015260400190565b601f8211156109b0576000816000526020600020601f850160051c81016020861015613ec75750805b601f850160051c820191505b81811015613ee657828155600101613ed3565b505050505050565b6001600160401b03831115613f0557613f05613a10565b613f1983613f138354613ce6565b83613e9e565b6000601f841160018114613f4d5760008515613f355750838201355b600019600387901b1c1916600186901b178355610833565b600083815260209020601f19861690835b82811015613f7e5786850135825560209485019460019092019101613f5e565b5086821015613f9b5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000611fe8602083018486613fad565b6001600160a01b038881168252871660208201526040810186905260ff851660608201526080810184905260c060a0820181905260009061402e9083018486613fad565b9998505050505050505050565b60006020828403121561404d57600080fd5b81516001600160401b0381111561406357600080fd5b8201601f8101841361407457600080fd5b8051614082613aef82613a56565b81815285602083850101111561409757600080fd5b6140a88260208301602086016134fa565b95945050505050565b600083516140c38184602088016134fa565b8351908301906140d78183602088016134fa565b01949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516141af8160178501602088016134fa565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516141e08160288401602088016134fa565b01602801949350505050565b8082018082111561085f5761085f613c4d565b60006020828403121561421157600080fd5b5051919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061424b9083018461351e565b9695505050505050565b60006020828403121561426757600080fd5b8151610a47816134c7565b808202811582820484141761085f5761085f613c4d565b60008161429857614298613c4d565b506000190190565b6040815260006142b3604083018561351e565b905082151560208301529392505050565b8181038181111561085f5761085f613c4d56fe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9295f636865636b4973426173654e46544c6f636b656446726f6d5462612866726f6d29a26469706673582212201ab0193af47f0c0ed0f5f317e4ce4581771ad6aff44c5079eae5b167bcfb082764736f6c6343000818003397667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000d670fad10b8ac03f7a3677d7331754828604615100000000000000000000000015985eb55883f3c107235c6c9ca2f9cd80e6861300000000000000000000000051b003161c6a193ba3a09eaaf1ff7c8d9e83441c000000000000000000000000000000000000000000000000000000000000000850617274734e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504e465400000000000000000000000000000000000000000000000000000000