[ { "inputs": [ { "internalType": "string", "name": "pptUri", "type": "string" }, { "internalType": "address[]", "name": "pptBase", "type": "address[]" }, { "internalType": "uint256", "name": "deadlineIn", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "Migratable", "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": "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": "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": [], "name": "NFT_OPEN_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NFT_OPEN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NFT_ROYAL_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NFT_ROYAL_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NFT_SEAL_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NFT_SEAL_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "URI_DATA_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "URI_DATA_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "nftId", "type": "uint256" } ], "name": "ageOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "nftId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256[]", "name": "nftIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "burnBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "denominationOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRoyal", "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": "uint256", "name": "anno", "type": "uint256" }, { "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "idBy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "anno", "type": "uint256" }, { "internalType": "uint256[]", "name": "levels", "type": "uint256[]" } ], "name": "idsBy", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "pure", "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": "uint256", "name": "nftId", "type": "uint256" } ], "name": "levelOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "migratable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "flag", "type": "bool" } ], "name": "migratable", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nftId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "index", "type": "uint256[]" } ], "name": "migrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "nftIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "index", "type": "uint256[]" } ], "name": "migrateBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "nftId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "index", "type": "uint256[]" } ], "name": "migrateFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256[]", "name": "nftIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "index", "type": "uint256[]" } ], "name": "migrateFromBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "nftId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "nftIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "mintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "base", "type": "address" } ], "name": "oldIndexOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "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": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "nftIds", "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": "nftId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "seal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sealAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "seals", "outputs": [ { "internalType": "bool[]", "name": "", "type": "bool[]" } ], "stateMutability": "view", "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": "beneficiary", "type": "address" } ], "name": "setRoyal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "shares", "outputs": [ { "internalType": "int256[34]", "name": "", "type": "int256[34]" } ], "stateMutability": "view", "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": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "year", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nftId", "type": "uint256" } ], "name": "yearOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162004de238038062004de28339810160408190526200003491620007e4565b6040518060400160405280600b81526020016a58506f776572205050547360a81b81525060405180604001604052806007815260200166161413d5d4141560ca1b8152508484848181846200008f81620003e560201b60201c565b506200009d600033620003f7565b620000d87f4a89d315e602b0589d706720a2c812227309c5069c55dff3ebf78f5e797aac6960008051602062004d6283398151915262000422565b620000f360008051602062004d6283398151915233620003f7565b6200012e7f90947b44e985de95b12c326fddbd8484ccd2a9ef92bf49396b95ef3f97eca82c60008051602062004da283398151915262000422565b6200014960008051602062004da283398151915233620003f7565b600780546001600160a01b03191633179055620001967fbc524e8ef0f829ac5a52282466b7de9273cee2f628ae71bbcd8e2d8cd73f4a5960008051602062004d8283398151915262000422565b620001b160008051602062004d8283398151915233620003f7565b620001ec7f19ce521112c022e84b39813f42b68b903544e308ec40537952dc94cd85c0de2060008051602062004dc283398151915262000422565b6200020760008051602062004dc283398151915233620003f7565b620002138142620008df565b600a5581516001600160401b03811115620002325762000232620006fc565b6040519080825280602002602001820160405280156200025c578160200160208202803683370190505b5080516200027391600891602090910190620005d9565b5081516001600160401b03811115620002905762000290620006fc565b604051908082528060200260200182016040528015620002ba578160200160208202803683370190505b508051620002d191600b9160209091019062000643565b5060005b82518110156200039c57828181518110620002f457620002f4620008f5565b602002602001015160088281548110620003125762000312620008f5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600960008584815181106200035a576200035a620008f5565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808062000393906200090b565b915050620002d5565b505050620003b9620003b36200046d60201b60201c565b62000471565b600e620003c78682620009b5565b50600f620003d68582620009b5565b50505050505050505062000a81565b6002620003f38282620009b5565b5050565b620004038282620004c3565b60008281526005602052604090206200041d908262000567565b505050565b600082815260046020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b3390565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008281526004602090815260408083206001600160a01b038516845290915290205460ff16620003f35760008281526004602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005233390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200057e836001600160a01b03841662000587565b90505b92915050565b6000818152600183016020526040812054620005d05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000581565b50600062000581565b82805482825590600052602060002090810192821562000631579160200282015b828111156200063157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620005fa565b506200063f929150620006e5565b5090565b82805482825590600052602060002090601f01602090048101928215620006315791602002820160005b83821115620006ac57835183826101000a81548160ff02191690831515021790555092602001926001016020816000010492830192600103026200066d565b8015620006db5782816101000a81549060ff0219169055600101602081600001049283019260010302620006ac565b50506200063f9291505b5b808211156200063f5760008155600101620006e6565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200073d576200073d620006fc565b604052919050565b600082601f8301126200075757600080fd5b815160206001600160401b03821115620007755762000775620006fc565b8160051b6200078682820162000712565b9283528481018201928281019087851115620007a157600080fd5b83870192505b84831015620007d95782516001600160a01b0381168114620007c95760008081fd5b82529183019190830190620007a7565b979650505050505050565b600080600060608486031215620007fa57600080fd5b83516001600160401b03808211156200081257600080fd5b818601915086601f8301126200082757600080fd5b8151818111156200083c576200083c620006fc565b602062000852601f8301601f1916820162000712565b82815289828487010111156200086757600080fd5b60005b83811015620008875785810183015182820184015282016200086a565b506000928101820192909252870151909550915080821115620008a957600080fd5b50620008b88682870162000745565b925050604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b80820180821115620005815762000581620008c9565b634e487b7160e01b600052603260045260246000fd5b600060018201620009205762000920620008c9565b5060010190565b600181811c908216806200093c57607f821691505b6020821081036200095d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041d57600081815260208120601f850160051c810160208610156200098c5750805b601f850160051c820191505b81811015620009ad5782815560010162000998565b505050505050565b81516001600160401b03811115620009d157620009d1620006fc565b620009e981620009e2845462000927565b8462000963565b602080601f83116001811462000a21576000841562000a085750858301515b600019600386901b1c1916600185901b178555620009ad565b600085815260208120601f198616915b8281101562000a525788860151825594840194600190910190840162000a31565b508582101562000a715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6142d18062000a916000396000f3fe608060405234801561001057600080fd5b50600436106103985760003560e01c8063715018a6116101e9578063c7b8b19d1161010f578063e8a3d485116100ad578063f2fde38b1161007c578063f2fde38b146108cc578063f3269716146108df578063f5298aca146108e7578063f544c35e146108fa57600080fd5b8063e8a3d4851461084e578063e985e9c514610856578063eb49721414610892578063f242432a146108b957600080fd5b8063cde82895116100e9578063cde82895146107f0578063d547741f14610817578063d81d0a151461082a578063d9ae6a721461083d57600080fd5b8063c7b8b19d146107a3578063ca15c873146107b6578063cd9b869a146107c957600080fd5b806394c209a511610187578063a62c779911610156578063a62c779914610736578063ad88852014610749578063adf114f61461075c578063bd85b0391461078357600080fd5b806394c209a5146106ec57806395d89b4114610713578063a217fddf1461071b578063a22cb4651461072357600080fd5b80638da5cb5b116101c35780638da5cb5b1461068e5780639010d07c146106b357806391d14854146106c6578063938e3d7b146106d957600080fd5b8063715018a614610660578063807946b51461066857806386fe212d1461067b57600080fd5b80632f2ff15d116102ce5780634f558e791161026c5780636b138dae1161023b5780636b138dae146106005780636b20c454146106275780636d5e30321461063a5780636f64599b1461064d57600080fd5b80634f558e79146105a557806355095bd2146105c757806361c0c976146105da5780636252e4e7146105ed57600080fd5b806336568abe116102a857806336568abe146105385780633ff7dd711461054b57806340da7ce7146105725780634e1273f41461058557600080fd5b80632f2ff15d146104f657806330ae0d7114610509578063315d96cb1461053057600080fd5b80630e89341c1161033b578063248a9ca311610315578063248a9ca31461047b57806329cd827d1461049e5780632a55205a146104b15780632eb2c2d6146104e357600080fd5b80630e89341c14610442578063156e29f61461045557806319fe06651461046857600080fd5b806303314efa1161037757806303314efa146103fb57806306fdde031461041057806308560eca146104255780630c7fa13e1461043a57600080fd5b8062fdd58e1461039d57806301ffc9a7146103c357806302fe5305146103e6575b600080fd5b6103b06103ab366004613207565b610923565b6040519081526020015b60405180910390f35b6103d66103d1366004613247565b6109bc565b60405190151581526020016103ba565b6103f96103f4366004613303565b6109c7565b005b6104036109fe565b6040516103ba9190613353565b610418610a3b565b6040516103ba91906133d5565b61042d610ac9565b6040516103ba91906133e8565b6103f9610b40565b61041861045036600461342e565b610bc8565b6103f9610463366004613447565b610c5c565b6103f961047636600461350e565b610c8f565b6103b061048936600461342e565b60009081526004602052604090206001015490565b6103b06104ac36600461342e565b610c9b565b6104c46104bf366004613595565b610ca6565b604080516001600160a01b0390931683526020830191909152016103ba565b6103f96104f13660046135d7565b610ccd565b6103f9610504366004613680565b610cf7565b6103b07f60a41b6ab1d6992ca5ee081ffbc285450d1838b7b46a056fb126f3adc7da83c581565b6103d6610d1c565b6103f9610546366004613680565b610d37565b6103b07f19ce521112c022e84b39813f42b68b903544e308ec40537952dc94cd85c0de2081565b6103f96105803660046136ac565b610db1565b61059861059336600461370c565b610dc3565b6040516103ba9190613811565b6103d66105b336600461342e565b600090815260036020526040902054151590565b6103b06105d536600461342e565b610eec565b6103f96105e8366004613824565b610ef7565b6103b06105fb366004613595565b610f03565b6103b07f37147d8b55ca5cc3962aa59ff6e41c083d9950a9038ea2dfe489c0de95be49ac81565b6103f9610635366004613869565b610f16565b6103b061064836600461342e565b610fb2565b6103f961065b3660046138a3565b610fbd565b6103f961100a565b6103f96106763660046138ce565b61101e565b6103f961068936600461342e565b6110a3565b600d546001600160a01b03165b6040516001600160a01b0390911681526020016103ba565b61069b6106c1366004613595565b61110f565b6103d66106d4366004613680565b611127565b6103f96106e7366004613303565b611152565b6103b07fbc524e8ef0f829ac5a52282466b7de9273cee2f628ae71bbcd8e2d8cd73f4a5981565b610418611188565b6103b0600081565b6103f96107313660046138e9565b611195565b6103b0610744366004613207565b6111a0565b6103f9610757366004613913565b611202565b6103b07f90947b44e985de95b12c326fddbd8484ccd2a9ef92bf49396b95ef3f97eca82c81565b6103b061079136600461342e565b60009081526003602052604090205490565b6105986107b136600461399f565b61120e565b6103b06107c436600461342e565b61121a565b6103b07f4a89d315e602b0589d706720a2c812227309c5069c55dff3ebf78f5e797aac6981565b6103b07f18279111969b053eb32d637cdc8d9e7e53d648d3969f60ee55ddd0f63a7c328081565b6103f9610825366004613680565b611231565b6103f9610838366004613869565b611256565b6007546001600160a01b031661069b565b610418611302565b6103d66108643660046139db565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6103b07f21b4f2a846971d5096997e4122542f612858bcbb112ef24ef9b354083523151981565b6103f96108c7366004613a05565b61138b565b6103f96108da3660046138a3565b6113ae565b6103b0611427565b6103f96108f5366004613447565b611436565b6103b06109083660046138a3565b6001600160a01b031660009081526009602052604090205490565b60006001600160a01b0383166109935760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006109b682611454565b7f4a89d315e602b0589d706720a2c812227309c5069c55dff3ebf78f5e797aac696109f18161145f565b6109fa82611469565b5050565b610a066131d1565b604080516104408101918290529060119060229082845b815481526020019060010190808311610a1d575b5050505050905090565b600e8054610a4890613a69565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7490613a69565b8015610ac15780601f10610a9657610100808354040283529160200191610ac1565b820191906000526020600020905b815481529060010190602001808311610aa457829003601f168201915b505050505081565b6060600b805480602002602001604051908101604052809291908181526020018280548015610a3157602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610b065790505050505050905090565b7fbc524e8ef0f829ac5a52282466b7de9273cee2f628ae71bbcd8e2d8cd73f4a59610b6a8161145f565b60005b600b548110156109fa576001600b8281548110610b8c57610b8c613aa3565b90600052602060002090602091828204019190066101000a81548160ff0219169083151502179055508080610bc090613acf565b915050610b6d565b606060028054610bd790613a69565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0390613a69565b8015610c505780601f10610c2557610100808354040283529160200191610c50565b820191906000526020600020905b815481529060010190602001808311610c3357829003601f168201915b50505050509050919050565b610c64611475565b610c6f8383836114cf565b610c8a83838360405180602001604052806000815250611534565b505050565b610c8a3384848461161d565b60006109b6826116d9565b60075460009081906001600160a01b0316610cc260c885613afe565b915091509250929050565b610cd885848461172e565b610ce38484846117aa565b610cf08585858585611826565b5050505050565b600082815260046020526040902060010154610d128161145f565b610c8a838361186b565b600c5460009015610d315750600c5442101590565b50600090565b6001600160a01b0381163314610da75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161098a565b6109fa828261188d565b610dbd848484846118af565b50505050565b60608151835114610e285760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161098a565b600083516001600160401b03811115610e4357610e43613264565b604051908082528060200260200182016040528015610e6c578160200160208202803683370190505b50905060005b8451811015610ee457610eb7858281518110610e9057610e90613aa3565b6020026020010151858381518110610eaa57610eaa613aa3565b6020026020010151610923565b828281518110610ec957610ec9613aa3565b6020908102919091010152610edd81613acf565b9050610e72565b509392505050565b60006109b68261191a565b610c8a338484846118af565b6000610f0f838361194b565b9392505050565b610f1e611475565b6000825111610f5b5760405162461bcd60e51b8152602060048201526009602482015268656d7074792069647360b81b604482015260640161098a565b6000815111610f9c5760405162461bcd60e51b815260206004820152600d60248201526c656d70747920616d6f756e747360981b604482015260640161098a565b610fa78383836119cc565b610c8a838383611a48565b60006109b682611be4565b7f90947b44e985de95b12c326fddbd8484ccd2a9ef92bf49396b95ef3f97eca82c610fe78161145f565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b611012611475565b61101c6000611c3c565b565b7f19ce521112c022e84b39813f42b68b903544e308ec40537952dc94cd85c0de206110488161145f565b8180156110555750600c54155b156109fa576110674262093a80613b12565b600c8190556040519081527ff5263b003efc1a0e68a4421ca09b9cb092cd3edf4d691f9392ed415b80da6ad19060200160405180910390a15050565b7fbc524e8ef0f829ac5a52282466b7de9273cee2f628ae71bbcd8e2d8cd73f4a596110cd8161145f565b6001600b83815481106110e2576110e2613aa3565b90600052602060002090602091828204019190066101000a81548160ff0219169083151502179055505050565b6000828152600560205260408120610f0f9083611c8e565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f4a89d315e602b0589d706720a2c812227309c5069c55dff3ebf78f5e797aac6961117c8161145f565b6006610c8a8382613b6b565b600f8054610a4890613a69565b6109fa338383611c9a565b6001600160a01b0382166000908152601060209081526040808320848452909152812054818113156111f85760006111d88585610923565b9050816111e54283613c2a565b6111ef9190613c41565b925050506109b6565b5060009392505050565b610dbd8484848461161d565b6060610f0f8383611d7a565b60008181526005602052604081206109b690611e21565b60008281526004602052604090206001015461124c8161145f565b610c8a838361188d565b61125e611475565b600082511161129b5760405162461bcd60e51b8152602060048201526009602482015268656d7074792069647360b81b604482015260640161098a565b60008151116112dc5760405162461bcd60e51b815260206004820152600d60248201526c656d70747920616d6f756e747360981b604482015260640161098a565b6112e7838383611e2b565b610c8a83838360405180602001604052806000815250611ea7565b60606006805461131190613a69565b80601f016020809104026020016040519081016040528092919081815260200182805461133d90613a69565b8015610a315780601f1061135f57610100808354040283529160200191610a31565b820191906000526020600020905b81548152906001019060200180831161136d57509395945050505050565b611396858484612001565b6113a1848484612048565b610cf08585858585612085565b6113b6611475565b6001600160a01b03811661141b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098a565b61142481611c3c565b50565b60006114316120ca565b905090565b61143e611475565b61144983838361211b565b610c8a838383612175565b60006109b68261228d565b61142481336122b2565b60026109fa8282613b6b565b600d546001600160a01b0316331461101c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098a565b6114da838383612048565b60006114e583610fb2565b90506114f281600a613d38565b6114fc9083613c2a565b6011611509600384613afe565b6022811061151957611519613aa3565b0160008282546115299190613d44565b909155505050505050565b6001600160a01b03841661155a5760405162461bcd60e51b815260040161098a90613d6c565b3360006115668561230b565b905060006115738561230b565b905061158483600089858589612356565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906115b4908490613b12565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116148360008989898961236c565b50505050505050565b42600a5410156116615760405162461bcd60e51b815260206004820152600f60248201526e191958591b1a5b99481c185cdcd959608a1b604482015260640161098a565b60005b83518110156116bd576116ab8585838151811061168357611683613aa3565b602002602001015185848151811061169d5761169d613aa3565b6020026020010151856124c7565b806116b581613acf565b915050611664565b50610dbd84848460405180602001604052806000815250611ea7565b60006116e6600383613dad565b156117035760405162461bcd60e51b815260040161098a90613dc1565b606482106117235760405162461bcd60e51b815260040161098a90613dec565b6109b682600a613d38565b805182511461174f5760405162461bcd60e51b815260040161098a90613e13565b60005b8251811015610dbd576117988484838151811061177157611771613aa3565b602002602001015184848151811061178b5761178b613aa3565b6020026020010151612001565b806117a281613acf565b915050611752565b80518251146117cb5760405162461bcd60e51b815260040161098a90613e13565b60005b8251811015610dbd57611814848483815181106117ed576117ed613aa3565b602002602001015184848151811061180757611807613aa3565b6020026020010151612048565b8061181e81613acf565b9150506117ce565b6001600160a01b03851633148061184257506118428533610864565b61185e5760405162461bcd60e51b815260040161098a90613e5b565b610cf085858585856126ed565b611875828261288f565b6000828152600560205260409020610c8a9082612915565b611897828261292a565b6000828152600560205260409020610c8a9082612991565b42600a5410156118f35760405162461bcd60e51b815260206004820152600f60248201526e191958591b1a5b99481c185cdcd959608a1b604482015260640161098a565b6118ff848484846124c7565b610dbd84848460405180602001604052806000815250611534565b600080611928606484613afe565b90506107e481116109b65760405162461bcd60e51b815260040161098a90613ea9565b6000611958600383613dad565b156119755760405162461bcd60e51b815260040161098a90613dc1565b606482106119955760405162461bcd60e51b815260040161098a90613dec565b6107e483116119b65760405162461bcd60e51b815260040161098a90613ea9565b816119c2846064613c2a565b610f0f9190613b12565b80518251146119ed5760405162461bcd60e51b815260040161098a90613e13565b60005b8251811015610dbd57611a3684848381518110611a0f57611a0f613aa3565b6020026020010151848481518110611a2957611a29613aa3565b602002602001015161211b565b80611a4081613acf565b9150506119f0565b6001600160a01b038316611a6e5760405162461bcd60e51b815260040161098a90613ecf565b8051825114611a8f5760405162461bcd60e51b815260040161098a90613e13565b6000339050611ab281856000868660405180602001604052806000815250612356565b60005b8351811015611b77576000848281518110611ad257611ad2613aa3565b602002602001015190506000848381518110611af057611af0613aa3565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611b405760405162461bcd60e51b815260040161098a90613f12565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611b6f81613acf565b915050611ab5565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611bc8929190613f56565b60405180910390a4604080516020810190915260009052610dbd565b600080611bf2606484613dad565b9050611bff600382613dad565b15611c1c5760405162461bcd60e51b815260040161098a90613dc1565b606481106109b65760405162461bcd60e51b815260040161098a90613dec565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610f0f83836129a6565b816001600160a01b0316836001600160a01b031603611d0d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161098a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060600082516001600160401b03811115611d9757611d97613264565b604051908082528060200260200182016040528015611dc0578160200160208202803683370190505b50905060005b8351811015610ee457611df285858381518110611de557611de5613aa3565b602002602001015161194b565b828281518110611e0457611e04613aa3565b602090810291909101015280611e1981613acf565b915050611dc6565b60006109b6825490565b8051825114611e4c5760405162461bcd60e51b815260040161098a90613e13565b60005b8251811015610dbd57611e9584848381518110611e6e57611e6e613aa3565b6020026020010151848481518110611e8857611e88613aa3565b60200260200101516114cf565b80611e9f81613acf565b915050611e4f565b6001600160a01b038416611ecd5760405162461bcd60e51b815260040161098a90613d6c565b8151835114611eee5760405162461bcd60e51b815260040161098a90613e13565b33611efe81600087878787612356565b60005b8451811015611f9957838181518110611f1c57611f1c613aa3565b6020026020010151600080878481518110611f3957611f39613aa3565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f819190613b12565b90915550819050611f9181613acf565b915050611f01565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611fea929190613f56565b60405180910390a4610cf0816000878787876129d0565b61200b4282613c2a565b6001600160a01b03841660009081526010602090815260408083208684529091528120805490919061203e908490613f84565b9091555050505050565b6120524282613c2a565b6001600160a01b03841660009081526010602090815260408083208684529091528120805490919061203e908490613d44565b6001600160a01b0385163314806120a157506120a18533610864565b6120bd5760405162461bcd60e51b815260040161098a90613e5b565b610cf08585858585612a8b565b60008063bc1913806120dd426064613c2a565b6120e79190613afe565b6120f3906107b2613b12565b90506107e481116121165760405162461bcd60e51b815260040161098a90613ea9565b919050565b612126838383612001565b600061213183610fb2565b905061213e81600a613d38565b6121489083613c2a565b6011612155600384613afe565b6022811061216557612165613aa3565b0160008282546115299190613f84565b6001600160a01b03831661219b5760405162461bcd60e51b815260040161098a90613ecf565b3360006121a78461230b565b905060006121b48461230b565b90506121d483876000858560405180602001604052806000815250612356565b6000858152602081815260408083206001600160a01b038a168452909152902054848110156122155760405162461bcd60e51b815260040161098a90613f12565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611614565b60006001600160e01b0319821663152a902d60e11b14806109b657506109b682612bc3565b6122bc8282611127565b6109fa576122c981612bce565b6122d4836020612be0565b6040516020016122e5929190613fa4565b60408051601f198184030181529082905262461bcd60e51b825261098a916004016133d5565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061234557612345613aa3565b602090810291909101015292915050565b612364868686868686612d7b565b505050505050565b6001600160a01b0384163b156123645760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906123b09089908990889088908890600401614019565b6020604051808303816000875af19250505080156123eb575060408051601f3d908101601f191682019092526123e89181019061405e565b60015b612497576123f761407b565b806308c379a003612430575061240b614097565b806124165750612432565b8060405162461bcd60e51b815260040161098a91906133d5565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161098a565b6001600160e01b0319811663f23a6e6160e01b146116145760405162461bcd60e51b815260040161098a90614120565b600b816000815181106124dc576124dc613aa3565b6020026020010151815481106124f4576124f4613aa3565b90600052602060002090602091828204019190069054906101000a900460ff16156125545760405162461bcd60e51b815260206004820152601060248201526f1b5a59dc985d1a5bdb881cd9585b195960821b604482015260640161098a565b60006125676125628561191a565b612ef4565b612572906002613c2a565b61257c9085613b12565b9050600060088360008151811061259557612595613aa3565b6020026020010151815481106125ad576125ad613aa3565b600091825260209091200154604051627eeac760e11b81526001600160a01b038881166004830152602482018590529091169062fdd58e90604401602060405180830381865afa158015612605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126299190614168565b905060088360008151811061264057612640613aa3565b60200260200101518154811061265857612658613aa3565b6000918252602090912001546001600160a01b031663f5298aca878361267e5787612680565b845b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260448101879052606401600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b50505050505050505050565b815183511461270e5760405162461bcd60e51b815260040161098a90613e13565b6001600160a01b0384166127345760405162461bcd60e51b815260040161098a90614181565b33612743818787878787612356565b60005b845181101561282957600085828151811061276357612763613aa3565b60200260200101519050600085838151811061278157612781613aa3565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156127d15760405162461bcd60e51b815260040161098a906141c6565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061280e908490613b12565b925050819055505050508061282290613acf565b9050612746565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612879929190613f56565b60405180910390a46123648187878787876129d0565b6128998282611127565b6109fa5760008281526004602090815260408083206001600160a01b03851684529091529020805460ff191660011790556128d13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f0f836001600160a01b038416612f15565b6129348282611127565b156109fa5760008281526004602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f0f836001600160a01b038416612f64565b60008260000182815481106129bd576129bd613aa3565b9060005260206000200154905092915050565b6001600160a01b0384163b156123645760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612a149089908990889088908890600401614210565b6020604051808303816000875af1925050508015612a4f575060408051601f3d908101601f19168201909252612a4c9181019061405e565b60015b612a5b576123f761407b565b6001600160e01b0319811663bc197c8160e01b146116145760405162461bcd60e51b815260040161098a90614120565b6001600160a01b038416612ab15760405162461bcd60e51b815260040161098a90614181565b336000612abd8561230b565b90506000612aca8561230b565b9050612ada838989858589612356565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015612b1b5760405162461bcd60e51b815260040161098a906141c6565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612b58908490613b12565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612bb8848a8a8a8a8a61236c565b505050505050505050565b60006109b68261305e565b60606109b66001600160a01b03831660145b60606000612bef836002613c2a565b612bfa906002613b12565b6001600160401b03811115612c1157612c11613264565b6040519080825280601f01601f191660200182016040528015612c3b576020820181803683370190505b509050600360fc1b81600081518110612c5657612c56613aa3565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c8557612c85613aa3565b60200101906001600160f81b031916908160001a9053506000612ca9846002613c2a565b612cb4906001613b12565b90505b6001811115612d2c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ce857612ce8613aa3565b1a60f81b828281518110612cfe57612cfe613aa3565b60200101906001600160f81b031916908160001a90535060049490941c93612d258161426e565b9050612cb7565b508315610f0f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161098a565b6001600160a01b038516612e025760005b8351811015612e0057828181518110612da757612da7613aa3565b602002602001015160036000868481518110612dc557612dc5613aa3565b602002602001015181526020019081526020016000206000828254612dea9190613b12565b90915550612df9905081613acf565b9050612d8c565b505b6001600160a01b0384166123645760005b8351811015611614576000848281518110612e3057612e30613aa3565b602002602001015190506000848381518110612e4e57612e4e613aa3565b6020026020010151905060006003600084815260200190815260200160002054905081811015612ed15760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161098a565b60009283526003602052604090922091039055612eed81613acf565b9050612e13565b6000612eff82613069565b612f0a906003613b12565b6109b690600a613d38565b6000818152600183016020526040812054612f5c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109b6565b5060006109b6565b6000818152600183016020526040812054801561304d576000612f88600183613c41565b8554909150600090612f9c90600190613c41565b9050818114613001576000866000018281548110612fbc57612fbc613aa3565b9060005260206000200154905080876000018481548110612fdf57612fdf613aa3565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061301257613012614285565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109b6565b60009150506109b6565b5092915050565b60006109b682613141565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130a85772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106130d4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106130f257662386f26fc10000830492506010015b6305f5e100831061310a576305f5e100830492506008015b612710831061311e57612710830492506004015b60648310613130576064830492506002015b600a83106109b65760010192915050565b60006001600160e01b03198216635a05180f60e01b14806109b657506109b68260006001600160e01b03198216637965db0b60e01b14806109b657506109b68260006001600160e01b03198216636cdb3d1360e11b14806131b257506001600160e01b031982166303a24d0760e21b145b806109b657506301ffc9a760e01b6001600160e01b03198316146109b6565b6040518061044001604052806022906020820280368337509192915050565b80356001600160a01b038116811461211657600080fd5b6000806040838503121561321a57600080fd5b613223836131f0565b946020939093013593505050565b6001600160e01b03198116811461142457600080fd5b60006020828403121561325957600080fd5b8135610f0f81613231565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561329f5761329f613264565b6040525050565b60006001600160401b038311156132bf576132bf613264565b6040516132d6601f8501601f19166020018261327a565b8091508381528484840111156132eb57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561331557600080fd5b81356001600160401b0381111561332b57600080fd5b8201601f8101841361333c57600080fd5b61334b848235602084016132a6565b949350505050565b6104408101818360005b602281101561337c57815183526020928301929091019060010161335d565b50505092915050565b60005b838110156133a0578181015183820152602001613388565b50506000910152565b600081518084526133c1816020860160208601613385565b601f01601f19169290920160200192915050565b602081526000610f0f60208301846133a9565b6020808252825182820181905260009190848201906040850190845b81811015613422578351151583529284019291840191600101613404565b50909695505050505050565b60006020828403121561344057600080fd5b5035919050565b60008060006060848603121561345c57600080fd5b613465846131f0565b95602085013595506040909401359392505050565b60006001600160401b0382111561349357613493613264565b5060051b60200190565b600082601f8301126134ae57600080fd5b813560206134bb8261347a565b6040516134c8828261327a565b83815260059390931b85018201928281019150868411156134e857600080fd5b8286015b8481101561350357803583529183019183016134ec565b509695505050505050565b60008060006060848603121561352357600080fd5b83356001600160401b038082111561353a57600080fd5b6135468783880161349d565b9450602086013591508082111561355c57600080fd5b6135688783880161349d565b9350604086013591508082111561357e57600080fd5b5061358b8682870161349d565b9150509250925092565b600080604083850312156135a857600080fd5b50508035926020909101359150565b600082601f8301126135c857600080fd5b610f0f838335602085016132a6565b600080600080600060a086880312156135ef57600080fd5b6135f8866131f0565b9450613606602087016131f0565b935060408601356001600160401b038082111561362257600080fd5b61362e89838a0161349d565b9450606088013591508082111561364457600080fd5b61365089838a0161349d565b9350608088013591508082111561366657600080fd5b50613673888289016135b7565b9150509295509295909350565b6000806040838503121561369357600080fd5b823591506136a3602084016131f0565b90509250929050565b600080600080608085870312156136c257600080fd5b6136cb856131f0565b9350602085013592506040850135915060608501356001600160401b038111156136f457600080fd5b6137008782880161349d565b91505092959194509250565b6000806040838503121561371f57600080fd5b82356001600160401b038082111561373657600080fd5b818501915085601f83011261374a57600080fd5b813560206137578261347a565b604051613764828261327a565b83815260059390931b850182019282810191508984111561378457600080fd5b948201945b838610156137a95761379a866131f0565b82529482019490820190613789565b965050860135925050808211156137bf57600080fd5b506137cc8582860161349d565b9150509250929050565b600081518084526020808501945080840160005b83811015613806578151875295820195908201906001016137ea565b509495945050505050565b602081526000610f0f60208301846137d6565b60008060006060848603121561383957600080fd5b833592506020840135915060408401356001600160401b0381111561385d57600080fd5b61358b8682870161349d565b60008060006060848603121561387e57600080fd5b613887846131f0565b925060208401356001600160401b038082111561355c57600080fd5b6000602082840312156138b557600080fd5b610f0f826131f0565b8035801515811461211657600080fd5b6000602082840312156138e057600080fd5b610f0f826138be565b600080604083850312156138fc57600080fd5b613905836131f0565b91506136a3602084016138be565b6000806000806080858703121561392957600080fd5b613932856131f0565b935060208501356001600160401b038082111561394e57600080fd5b61395a8883890161349d565b9450604087013591508082111561397057600080fd5b61397c8883890161349d565b9350606087013591508082111561399257600080fd5b506137008782880161349d565b600080604083850312156139b257600080fd5b8235915060208301356001600160401b038111156139cf57600080fd5b6137cc8582860161349d565b600080604083850312156139ee57600080fd5b6139f7836131f0565b91506136a3602084016131f0565b600080600080600060a08688031215613a1d57600080fd5b613a26866131f0565b9450613a34602087016131f0565b9350604086013592506060860135915060808601356001600160401b03811115613a5d57600080fd5b613673888289016135b7565b600181811c90821680613a7d57607f821691505b602082108103613a9d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613ae157613ae1613ab9565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613b0d57613b0d613ae8565b500490565b808201808211156109b6576109b6613ab9565b601f821115610c8a57600081815260208120601f850160051c81016020861015613b4c5750805b601f850160051c820191505b8181101561236457828155600101613b58565b81516001600160401b03811115613b8457613b84613264565b613b9881613b928454613a69565b84613b25565b602080601f831160018114613bcd5760008415613bb55750858301515b600019600386901b1c1916600185901b178555612364565b600085815260208120601f198616915b82811015613bfc57888601518255948401946001909101908401613bdd565b5085821015613c1a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176109b6576109b6613ab9565b818103818111156109b6576109b6613ab9565b600181815b80851115613c8f578160001904821115613c7557613c75613ab9565b80851615613c8257918102915b93841c9390800290613c59565b509250929050565b600082613ca6575060016109b6565b81613cb3575060006109b6565b8160018114613cc95760028114613cd357613cef565b60019150506109b6565b60ff841115613ce457613ce4613ab9565b50506001821b6109b6565b5060208310610133831016604e8410600b8410161715613d12575081810a6109b6565b613d1c8383613c54565b8060001904821115613d3057613d30613ab9565b029392505050565b6000610f0f8383613c97565b8082018281126000831280158216821582161715613d6457613d64613ab9565b505092915050565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600082613dbc57613dbc613ae8565b500690565b6020808252601190820152701b9bdb8b5d195c9b985c9e481b195d995b607a1b604082015260600190565b6020808252600d908201526c1a5b9d985b1a59081b195d995b609a1b604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252600c908201526b34b73b30b634b2103cb2b0b960a11b604082015260600190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b604081526000613f6960408301856137d6565b8281036020840152613f7b81856137d6565b95945050505050565b818103600083128015838313168383128216171561305757613057613ab9565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613fdc816017850160208801613385565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161400d816028840160208801613385565b01602801949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614053908301846133a9565b979650505050505050565b60006020828403121561407057600080fd5b8151610f0f81613231565b600060033d11156140945760046000803e5060005160e01c5b90565b600060443d10156140a55790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156140d457505050505090565b82850191508151818111156140ec5750505050505090565b843d87010160208285010111156141065750505050505090565b6141156020828601018761327a565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60006020828403121561417a57600080fd5b5051919050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061423c908301866137d6565b828103606084015261424e81866137d6565b9050828103608084015261426281856133a9565b98975050505050505050565b60008161427d5761427d613ab9565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212205121a08cbea9e5be7bc1c269eb6d6dc4c479daa71de53a0909ca617ace2d1b0964736f6c6343000813003321b4f2a846971d5096997e4122542f612858bcbb112ef24ef9b354083523151918279111969b053eb32d637cdc8d9e7e53d648d3969f60ee55ddd0f63a7c328037147d8b55ca5cc3962aa59ff6e41c083d9950a9038ea2dfe489c0de95be49ac60a41b6ab1d6992ca5ee081ffbc285450d1838b7b46a056fb126f3adc7da83c5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000007861f80000000000000000000000000000000000000000000000000000000000000006168747470733a2f2f697066732e78706f7765726d696e652e636f6d2f697066732f516d51716e4d6170717a67414e64446e32715244544e4c5857545934327a34574a6132786d4850645636746544412f333230783432372f7b69647d2e6a736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000d4385fbe9a8334162742254947858381edcefdce0000000000000000000000008fde6d6bab0d6557e6ff923091a0767016631378000000000000000000000000807ce552003c2b2358c6be2656cc5234ec538d46000000000000000000000000098e7bec9aea1938ee769b111ab8bb56d22cff0200000000000000000000000072290cbd47988be1546362c7d57eacdcdd01f052000000000000000000000000b8ad9099a232e142a5e3cc2ddaecd8781d55d45600000000000000000000000093a0929477187271c38cc991f5e355e2becd09a600000000000000000000000068db5e6bf3f5c6041c3135ee18b27e07c12a9bba0000000000000000000000005a8a600d852ee477891ac9b71794e850323aaf60000000000000000000000000e97780ba3b826980e6b40921ae81566ae5c1da350000000000000000000000001f859150a2a6e8642c086eb4c23fe69481e1460700000000000000000000000064ce57850c2f15944c7988f60e6c5efd9037b09a000000000000000000000000360ae2a496ac20859b838b670a9a7a22d40f200d