[ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint8", "name": "decimals_", "type": "uint8" }, { "internalType": "uint256", "name": "maxTotalSupplyERC721_", "type": "uint256" }, { "internalType": "address", "name": "initialOwner_", "type": "address" }, { "internalType": "address", "name": "initialMintRecipient_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyExists", "type": "error" }, { "inputs": [], "name": "DecimalsTooLow", "type": "error" }, { "inputs": [], "name": "InsufficientAllowance", "type": "error" }, { "inputs": [], "name": "InvalidApproval", "type": "error" }, { "inputs": [], "name": "InvalidExemption", "type": "error" }, { "inputs": [], "name": "InvalidOperator", "type": "error" }, { "inputs": [], "name": "InvalidRecipient", "type": "error" }, { "inputs": [], "name": "InvalidSender", "type": "error" }, { "inputs": [], "name": "InvalidSigner", "type": "error" }, { "inputs": [], "name": "InvalidSpender", "type": "error" }, { "inputs": [], "name": "InvalidTokenId", "type": "error" }, { "inputs": [], "name": "MintLimitReached", "type": "error" }, { "inputs": [], "name": "NotFound", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "OwnedIndexOverflow", "type": "error" }, { "inputs": [], "name": "PermitDeadlineExpired", "type": "error" }, { "inputs": [], "name": "QueueEmpty", "type": "error" }, { "inputs": [], "name": "QueueFull", "type": "error" }, { "inputs": [], "name": "QueueOutOfBounds", "type": "error" }, { "inputs": [], "name": "RecipientIsERC721TransferExempt", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UnsafeRecipient", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "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": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Transfer", "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": "id", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ID_ENCODING_PREFIX", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender_", "type": "address" }, { "internalType": "uint256", "name": "valueOrId_", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender_", "type": "address" }, { "internalType": "uint256", "name": "value_", "type": "uint256" } ], "name": "erc20Approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" } ], "name": "erc20BalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "erc20TotalSupply", "outputs": [ { "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": "value_", "type": "uint256" } ], "name": "erc20TransferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender_", "type": "address" }, { "internalType": "uint256", "name": "id_", "type": "uint256" } ], "name": "erc721Approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" } ], "name": "erc721BalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "erc721TotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target_", "type": "address" } ], "name": "erc721TransferExempt", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256", "name": "id_", "type": "uint256" } ], "name": "erc721TransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getERC721QueueLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "start_", "type": "uint256" }, { "internalType": "uint256", "name": "count_", "type": "uint256" } ], "name": "getERC721TokensInQueue", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" } ], "name": "owned", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id_", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "erc721Owner", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "address", "name": "spender_", "type": "address" }, { "internalType": "uint256", "name": "value_", "type": "uint256" }, { "internalType": "uint256", "name": "deadline_", "type": "uint256" }, { "internalType": "uint8", "name": "v_", "type": "uint8" }, { "internalType": "bytes32", "name": "r_", "type": "bytes32" }, { "internalType": "bytes32", "name": "s_", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256", "name": "id_", "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": "id_", "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": "address", "name": "account_", "type": "address" }, { "internalType": "bool", "name": "value_", "type": "bool" } ], "name": "setERC721TransferExempt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "state_", "type": "bool" } ], "name": "setSelfERC721TransferExempt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id_", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256", "name": "value_", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256", "name": "valueOrId_", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "units", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
61010060405234801562000011575f80fd5b506040516200661f3803806200661f8339818101604052810190620000379190620018cc565b858585845f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000ae575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000a59190620019b3565b60405180910390fd5b620000bf81620001ab60201b60201c565b508260039081620000d1919062001bfc565b508160049081620000e3919062001bfc565b5060128160ff16101562000123576040517f98790fd500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff1660808160ff1681525050608051600a62000142919062001e5d565b60a081815250504660c08181525050620001616200026c60201b60201c565b60e081815250505050506200017e816001620002fb60201b60201c565b6200019f8160a0518562000193919062001ead565b620003e960201b60201c565b505050505050620021d6565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60036040516200029f919062001f9f565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64630604051602001620002e095949392919062001fe2565b60405160208183030381529060405280519060200120905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000361576040517fa41e3d3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156200037f576200037982620004d160201b60201c565b62000391565b62000390826200051260201b60201c565b5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200044f576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f8000000000000000000000000000000000000000000000000000000000000000816005546200048091906200203d565b1115620004b9576040517f303b682f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620004cc5f83836200058460201b60201c565b505050565b5f620004e382620008ed60201b60201c565b90505f5b818110156200050d5762000501836200093660201b60201c565b806001019050620004e7565b505050565b5f60a051620005278362000a7560201b60201c565b620005339190620020a4565b90505f6200054783620008ed60201b60201c565b90505f5b8183620005599190620020db565b8110156200057e57620005728462000abb60201b60201c565b8060010190506200054b565b50505050565b5f80620005978562000a7560201b60201c565b90505f620005ab8562000a7560201b60201c565b9050620005c086868662000c8b60201b60201c565b5f620005d28762000deb60201b60201c565b90505f620005e68762000deb60201b60201c565b9050818015620005f35750805b620008de5781156200069b575f60a05184620006109190620020a4565b60a05160075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200065d9190620020a4565b620006699190620020db565b90505f5b818110156200069357620006878962000abb60201b60201c565b8060010190506200066d565b5050620008dd565b80156200073e575f60a05160075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054620006f09190620020a4565b60a05186620007009190620020a4565b6200070c9190620020db565b90505f5b8181101562000736576200072a8a6200093660201b60201c565b80600101905062000710565b5050620008dc565b5f60a051876200074f9190620020a4565b90505f5b818110156200082d575f6001600c5f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050620007ac9190620020db565b90505f600c5f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811062000801576200080062002115565b5b905f5260205f20015490506200081f8c8c8362000e7460201b60201c565b826001019250505062000753565b508060a051620008438b62000a7560201b60201c565b6200084f9190620020a4565b60a051876200085f9190620020a4565b6200086b9190620020db565b1115620008845762000883896200093660201b60201c565b5b8060a05185620008959190620020a4565b60a051620008a98b62000a7560201b60201c565b620008b59190620020a4565b620008c19190620020db565b1115620008da57620008d98862000abb60201b60201c565b5b505b5b5b60019450505050509392505050565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200099c576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905062000a299190620020db565b8154811062000a3d5762000a3c62002115565b5b905f5260205f200154905062000a5b825f8362000e7460201b60201c565b62000a71816001620011fd60201b90919060201c565b5050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b21576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f62000b3460016200131960201b60201c565b62000b535762000b4b60016200138560201b60201c565b905062000bf9565b60065f815462000b639062002142565b919050819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6006540362000bc6576040517f303b682f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006547f800000000000000000000000000000000000000000000000000000000000000062000bf691906200203d565b90505b5f62000c0b82620014e060201b60201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000c73576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000c8681848462000e7460201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000cdf578060055f82825462000cd291906200203d565b9250508190555062000d35565b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000d2d9190620020db565b925050819055505b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dde91906200218e565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148062000e6d5750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200107b5760095f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905062000f689190620020db565b8154811062000f7c5762000f7b62002115565b5b905f5260205f200154905081811462001016575f62000fa1836200151560201b60201c565b905081600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811062000ff65762000ff562002115565b5b905f5260205f2001819055506200101482826200153760201b60201c565b505b600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480620010665762001065620021a9565b5b600190038181905f5260205f20015f90559055505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200118857620010c181836200160660201b60201c565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f909190919091505562001182816001600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050620011769190620020db565b6200153760201b60201c565b6200119d565b600b5f8281526020019081526020015f205f90555b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f6001835f015f9054906101000a90046fffffffffffffffffffffffffffffffff16039050825f0160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff16036200129f576040517f8acb5f2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81836001015f836fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080835f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050565b5f815f015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16825f0160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16149050919050565b5f80825f0160109054906101000a90046fffffffffffffffffffffffffffffffff169050825f015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff160362001425576040517f75e52f4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600190039050826001015f826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f20549150826001015f826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580835f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050919050565b5f80600b5f8481526020019081526020015f2054905073ffffffffffffffffffffffffffffffffffffffff8116915050919050565b5f80600b5f8481526020019081526020015f205490508060a01c915050919050565b5f600b5f8481526020019081526020015f2054905060a07fffffffffffffffffffffffff0000000000000000000000000000000000000000901c821115620015ab576040517ffcb3438c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000008260a01b1673ffffffffffffffffffffffffffffffffffffffff821601905080600b5f8581526020019081526020015f2081905550505050565b5f600b5f8481526020019081526020015f2054905073ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff0000000000000000000000000000000000000000821601905080600b5f8581526020019081526020015f2081905550505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620016d4826200168c565b810181811067ffffffffffffffff82111715620016f657620016f56200169c565b5b80604052505050565b5f6200170a62001673565b9050620017188282620016c9565b919050565b5f67ffffffffffffffff8211156200173a57620017396200169c565b5b62001745826200168c565b9050602081019050919050565b5f5b838110156200177157808201518184015260208101905062001754565b5f8484015250505050565b5f620017926200178c846200171d565b620016ff565b905082815260208101848484011115620017b157620017b062001688565b5b620017be84828562001752565b509392505050565b5f82601f830112620017dd57620017dc62001684565b5b8151620017ef8482602086016200177c565b91505092915050565b5f60ff82169050919050565b6200180f81620017f8565b81146200181a575f80fd5b50565b5f815190506200182d8162001804565b92915050565b5f819050919050565b620018478162001833565b811462001852575f80fd5b50565b5f8151905062001865816200183c565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62001896826200186b565b9050919050565b620018a8816200188a565b8114620018b3575f80fd5b50565b5f81519050620018c6816200189d565b92915050565b5f805f805f8060c08789031215620018e957620018e86200167c565b5b5f87015167ffffffffffffffff81111562001909576200190862001680565b5b6200191789828a01620017c6565b965050602087015167ffffffffffffffff8111156200193b576200193a62001680565b5b6200194989828a01620017c6565b95505060406200195c89828a016200181d565b94505060606200196f89828a0162001855565b93505060806200198289828a01620018b6565b92505060a06200199589828a01620018b6565b9150509295509295509295565b620019ad816200188a565b82525050565b5f602082019050620019c85f830184620019a2565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062001a1d57607f821691505b60208210810362001a335762001a32620019d8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262001a977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001a5a565b62001aa3868362001a5a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62001ae462001ade62001ad88462001833565b62001abb565b62001833565b9050919050565b5f819050919050565b62001aff8362001ac4565b62001b1762001b0e8262001aeb565b84845462001a66565b825550505050565b5f90565b62001b2d62001b1f565b62001b3a81848462001af4565b505050565b5b8181101562001b615762001b555f8262001b23565b60018101905062001b40565b5050565b601f82111562001bb05762001b7a8162001a39565b62001b858462001a4b565b8101602085101562001b95578190505b62001bad62001ba48562001a4b565b83018262001b3f565b50505b505050565b5f82821c905092915050565b5f62001bd25f198460080262001bb5565b1980831691505092915050565b5f62001bec838362001bc1565b9150826002028217905092915050565b62001c0782620019ce565b67ffffffffffffffff81111562001c235762001c226200169c565b5b62001c2f825462001a05565b62001c3c82828562001b65565b5f60209050601f83116001811462001c72575f841562001c5d578287015190505b62001c69858262001bdf565b86555062001cd8565b601f19841662001c828662001a39565b5f5b8281101562001cab5784890151825560018201915060208501945060208101905062001c84565b8683101562001ccb578489015162001cc7601f89168262001bc1565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562001d6a5780860481111562001d425762001d4162001ce0565b5b600185161562001d525780820291505b808102905062001d628562001d0d565b945062001d22565b94509492505050565b5f8262001d84576001905062001e56565b8162001d93575f905062001e56565b816001811462001dac576002811462001db75762001ded565b600191505062001e56565b60ff84111562001dcc5762001dcb62001ce0565b5b8360020a91508482111562001de65762001de562001ce0565b5b5062001e56565b5060208310610133831016604e8410600b841016171562001e275782820a90508381111562001e215762001e2062001ce0565b5b62001e56565b62001e36848484600162001d19565b9250905081840481111562001e505762001e4f62001ce0565b5b81810290505b9392505050565b5f62001e698262001833565b915062001e7683620017f8565b925062001ea57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001d73565b905092915050565b5f62001eb98262001833565b915062001ec68362001833565b925082820262001ed68162001833565b9150828204841483151762001ef05762001eef62001ce0565b5b5092915050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f815462001f218162001a05565b62001f2d818662001ef7565b9450600182165f811462001f4a576001811462001f605762001f96565b60ff198316865281151582028601935062001f96565b62001f6b8562001f01565b5f5b8381101562001f8e5781548189015260018201915060208101905062001f6d565b838801955050505b50505092915050565b5f62001fac828462001f13565b915081905092915050565b5f819050919050565b62001fcb8162001fb7565b82525050565b62001fdc8162001833565b82525050565b5f60a08201905062001ff75f83018862001fc0565b62002006602083018762001fc0565b62002015604083018662001fc0565b62002024606083018562001fd1565b620020336080830184620019a2565b9695505050505050565b5f620020498262001833565b9150620020568362001833565b925082820190508082111562002071576200207062001ce0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620020b08262001833565b9150620020bd8362001833565b925082620020d057620020cf62002077565b5b828204905092915050565b5f620020e78262001833565b9150620020f48362001833565b92508282039050818111156200210f576200210e62001ce0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6200214e8262001833565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362002183576200218262001ce0565b5b600182019050919050565b5f602082019050620021a35f83018462001fd1565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b60805160a05160c05160e0516143c8620022575f395f610b5b01525f610b2701525f8181610ed801528181611bf50152818161232801528181612354015281816123f50152818161245e015281816124bc015281816125b9015281816125ed01528181612634015281816126600152612d1401525f610b0201526143c85ff3fe608060405234801561000f575f80fd5b5060043610610246575f3560e01c80638a696e5011610139578063c6e672b9116100b6578063dd6376991161007a578063dd63769914610764578063dfabc03314610780578063e985e9c51461079c578063f2fde38b146107cc578063f780bc1a146107e857610246565b8063c6e672b91461069c578063c87b56dd146106b8578063d505accf146106e8578063d96ca0b914610704578063dd62ed3e1461073457610246565b8063a9059cbb116100fd578063a9059cbb146105d2578063b1ab931714610602578063b3f9ea3414610632578063b88d4fde14610662578063c5ab3ba61461067e57610246565b80638a696e50146105405780638da5cb5b1461055c57806395d89b411461057a578063976a843514610598578063a22cb465146105b657610246565b80633644e515116101c75780636e8f624b1161018b5780636e8f624b1461049a57806370a08231146104b8578063715018a6146104e85780637ecebe00146104f257806389fb4c661461052257610246565b80633644e515146103e257806342842e0e146104005780634d9660721461041c5780634f02c4201461044c5780636352211e1461046a57610246565b806309674eb01161020e57806309674eb01461032857806309f0ef651461034657806318160ddd1461037657806323b872dd14610394578063313ce567146103c457610246565b806301ffc9a71461024a57806302519da31461027a57806306fdde03146102aa578063081812fc146102c8578063095ea7b3146102f8575b5f80fd5b610264600480360381019061025f919061364e565b610818565b6040516102719190613693565b60405180910390f35b610294600480360381019061028f9190613706565b6108e9565b6040516102a19190613749565b60405180910390f35b6102b261092f565b6040516102bf91906137ec565b60405180910390f35b6102e260048036038101906102dd9190613836565b6109bb565b6040516102ef9190613870565b60405180910390f35b610312600480360381019061030d9190613889565b6109eb565b60405161031f9190613693565b60405180910390f35b610330610a25565b60405161033d9190613749565b60405180910390f35b610360600480360381019061035b9190613706565b610a35565b60405161036d9190613693565b60405180910390f35b61037e610abd565b60405161038b9190613749565b60405180910390f35b6103ae60048036038101906103a991906138c7565b610ac3565b6040516103bb9190613693565b60405180910390f35b6103cc610b00565b6040516103d99190613932565b60405180910390f35b6103ea610b24565b6040516103f79190613963565b60405180910390f35b61041a600480360381019061041591906138c7565b610b80565b005b61043660048036038101906104319190613889565b610b9f565b6040516104439190613693565b60405180910390f35b610454610cf1565b6040516104619190613749565b60405180910390f35b610484600480360381019061047f9190613836565b610cf7565b6040516104919190613870565b60405180910390f35b6104a2610dac565b6040516104af9190613749565b60405180910390f35b6104d260048036038101906104cd9190613706565b610dd0565b6040516104df9190613749565b60405180910390f35b6104f0610de5565b005b61050c60048036038101906105079190613706565b610df8565b6040516105199190613749565b60405180910390f35b61052a610e0d565b6040516105379190613749565b60405180910390f35b61055a600480360381019061055591906139a6565b610e16565b005b610564610e23565b6040516105719190613870565b60405180910390f35b610582610e4a565b60405161058f91906137ec565b60405180910390f35b6105a0610ed6565b6040516105ad9190613749565b60405180910390f35b6105d060048036038101906105cb91906139d1565b610efa565b005b6105ec60048036038101906105e79190613889565b611057565b6040516105f99190613693565b60405180910390f35b61061c60048036038101906106179190613706565b6110d0565b6040516106299190613ac6565b60405180910390f35b61064c60048036038101906106479190613706565b611163565b6040516106599190613749565b60405180910390f35b61067c60048036038101906106779190613c12565b6111ac565b005b61068661131e565b6040516106939190613749565b60405180910390f35b6106b660048036038101906106b191906139d1565b611327565b005b6106d260048036038101906106cd9190613836565b61133d565b6040516106df91906137ec565b60405180910390f35b61070260048036038101906106fd9190613ce6565b61136e565b005b61071e600480360381019061071991906138c7565b6116ee565b60405161072b9190613693565b60405180910390f35b61074e60048036038101906107499190613d83565b6118fa565b60405161075b9190613749565b60405180910390f35b61077e600480360381019061077991906138c7565b61191a565b005b61079a60048036038101906107959190613889565b611c29565b005b6107b660048036038101906107b19190613d83565b611dd9565b6040516107c39190613693565b60405180910390f35b6107e660048036038101906107e19190613706565b611e03565b005b61080260048036038101906107fd9190613dc1565b611e87565b60405161080f9190613ac6565b60405180910390f35b5f7fcaf91ff5000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e257507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6003805461093c90613e2c565b80601f016020809104026020016040519081016040528092919081815260200182805461096890613e2c565b80156109b35780601f1061098a576101008083540402835291602001916109b3565b820191905f5260205f20905b81548152906001019060200180831161099657829003601f168201915b505050505081565b6009602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6109f582611f41565b15610a0957610a048383611c29565b610a1a565b610a138383610b9f565b9050610a1f565b600190505b92915050565b5f610a306001611f98565b905090565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610ab65750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b9050919050565b60055481565b5f610acd82611f41565b15610ae257610add84848461191a565b610af4565b610aed8484846116ee565b9050610af9565b600190505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f7f00000000000000000000000000000000000000000000000000000000000000004614610b5957610b54611ff2565b610b7b565b7f00000000000000000000000000000000000000000000000000000000000000005b905090565b610b9a83838360405180602001604052805f8152506111ac565b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c05576040517f5461585f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610cdf9190613749565b60405180910390a36001905092915050565b60065481565b5f610d018261207d565b9050610d0c82611f41565b610d42576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610da7576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b7f800000000000000000000000000000000000000000000000000000000000000081565b6007602052805f5260405f205f915090505481565b610ded6120b2565b610df65f612139565b565b600e602052805f5260405f205f915090505481565b5f600554905090565b610e2033826121fa565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60048054610e5790613e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8390613e2c565b8015610ece5780601f10610ea557610100808354040283529160200191610ece565b820191905f5260205f20905b815481529060010190602001808311610eb157829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f5f576040517fccea9e6f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161104b9190613693565b60405180910390a35050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110bd576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110c83384846122d5565b905092915050565b6060600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561115757602002820191905f5260205f20905b815481526020019060010190808311611143575b50505050509050919050565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b6111b582611f41565b6111eb576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f6848484610ac3565b505f8373ffffffffffffffffffffffffffffffffffffffff163b141580156112e1575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b815260040161127f9493929190613eae565b6020604051808303815f875af115801561129b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bf9190613f0c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611318576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b5f600654905090565b61132f6120b2565b61133982826121fa565b5050565b6060611348826126bf565b6040516020016113589190613f97565b6040516020818303038152906040529050919050565b428410156113a8576040517f05787bdf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b185611f41565b156113e8576040517f1f3e0de800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361144d576040517f5461585f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6001611458610b24565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98a8a8a600e5f8f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050558b6040516020016114dd96959493929190613fbc565b60405160208183030381529060405280519060200120604051602001611504929190614085565b604051602081830303815290604052805190602001208585856040515f815260200160405260405161153994939291906140bb565b6020604051602081039080840390855afa158015611559573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806115cb57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611602576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516116dd9190613749565b60405180910390a350505050505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611754576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117b9576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118e5578281611868919061412b565b60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6118f08585856122d5565b9150509392505050565b6008602052815f5260405f20602052805f5260405f205f91509150505481565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361197f576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119e4576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119ed8161207d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611b0f5750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611b77575060095f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611bae576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bb782610a35565b15611bee576040517f5ce7539700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c1983837f0000000000000000000000000000000000000000000000000000000000000000612789565b611c248383836128e1565b505050565b5f611c338261207d565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611cf35750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d2a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260095f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600a602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b611e0b6120b2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e7b575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611e729190613870565b60405180910390fd5b611e8481612139565b50565b60605f8267ffffffffffffffff811115611ea457611ea3613aee565b5b604051908082528060200260200182016040528015611ed25781602001602082028036833780820191505090505b5090505f8490505b8385611ee6919061415e565b811015611f3657611f01816001612c3990919063ffffffff16565b828683611f0e919061412b565b81518110611f1f57611f1e614191565b5b602002602001018181525050806001019050611eda565b508091505092915050565b5f7f800000000000000000000000000000000000000000000000000000000000000082118015611f9157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214155b9050919050565b5f815f015f9054906101000a90046fffffffffffffffffffffffffffffffff16825f0160109054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff169050919050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6003604051612023919061425a565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc64630604051602001612062959493929190614270565b60405160208183030381529060405280519060200120905090565b5f80600b5f8481526020019081526020015f2054905073ffffffffffffffffffffffffffffffffffffffff8116915050919050565b6120ba612cdb565b73ffffffffffffffffffffffffffffffffffffffff166120d8610e23565b73ffffffffffffffffffffffffffffffffffffffff1614612137576120fb612cdb565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161212e9190613870565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361225f576040517fa41e3d3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156122735761226e82612ce2565b61227d565b61227c82612d11565b5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f806122e0856108e9565b90505f6122ec856108e9565b90506122f9868686612789565b5f61230387610a35565b90505f61230f87610a35565b905081801561231b5750805b6126b05781156123ec575f7f00000000000000000000000000000000000000000000000000000000000000008461235291906142ee565b7f000000000000000000000000000000000000000000000000000000000000000060075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546123bb91906142ee565b6123c5919061412b565b90505f5b818110156123e5576123da89612d83565b8060010190506123c9565b50506126af565b80156124b9575f7f000000000000000000000000000000000000000000000000000000000000000060075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461245c91906142ee565b7f00000000000000000000000000000000000000000000000000000000000000008661248891906142ee565b612492919061412b565b90505f5b818110156124b2576124a78a612f2a565b806001019050612496565b50506126ae565b5f7f0000000000000000000000000000000000000000000000000000000000000000876124e691906142ee565b90505f5b818110156125b5575f6001600c5f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050612540919061412b565b90505f600c5f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061259257612591614191565b5b905f5260205f20015490506125a88c8c836128e1565b82600101925050506124ea565b50807f00000000000000000000000000000000000000000000000000000000000000006125e18b6108e9565b6125eb91906142ee565b7f00000000000000000000000000000000000000000000000000000000000000008761261791906142ee565b612621919061412b565b11156126315761263089612f2a565b5b807f00000000000000000000000000000000000000000000000000000000000000008561265e91906142ee565b7f00000000000000000000000000000000000000000000000000000000000000006126888b6108e9565b61269291906142ee565b61269c919061412b565b11156126ac576126ab88612d83565b5b505b5b5b60019450505050509392505050565b60605f60016126cd84613059565b0190505f8167ffffffffffffffff8111156126eb576126ea613aee565b5b6040519080825280601f01601f19166020018201604052801561271d5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561277e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612773576127726142c1565b5b0494505f850361272a575b819350505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d9578060055f8282546127cd919061415e565b9250508190555061282d565b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612825919061412b565b925050819055505b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128d49190613749565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612acb5760095f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506129d2919061412b565b815481106129e3576129e2614191565b5b905f5260205f2001549050818114612a69575f6129ff836131aa565b905081600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110612a5157612a50614191565b5b905f5260205f200181905550612a6782826131cc565b505b600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480612ab657612ab561431e565b5b600190038181905f5260205f20015f90559055505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bc457612b08818361329a565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055612bbf816001600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050612bba919061412b565b6131cc565b612bd9565b600b5f8281526020019081526020015f205f90555b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f612c4383611f98565b8210612c7b576040517f580821e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001015f83855f015f9054906101000a90046fffffffffffffffffffffffffffffffff16016fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b5f612cec82611163565b90505f5b81811015612d0c57612d0183612f2a565b806001019050612cf0565b505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000612d3c836108e9565b612d4691906142ee565b90505f612d5283611163565b90505f5b8183612d62919061412b565b811015612d7d57612d7284612d83565b806001019050612d56565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612de8576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612df36001613307565b612e0857612e016001613373565b9050612ea9565b60065f8154612e169061434b565b919050819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065403612e78576040517f303b682f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006547f8000000000000000000000000000000000000000000000000000000000000000612ea6919061415e565b90505b5f612eb38261207d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612f1a576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f258184846128e1565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612f8f576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061301a919061412b565b8154811061302b5761302a614191565b5b905f5260205f2001549050613041825f836128e1565b6130558160016134cd90919063ffffffff16565b5050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106130b5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816130ab576130aa6142c1565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106130f2576d04ee2d6d415b85acef810000000083816130e8576130e76142c1565b5b0492506020810190505b662386f26fc10000831061312157662386f26fc100008381613117576131166142c1565b5b0492506010810190505b6305f5e100831061314a576305f5e10083816131405761313f6142c1565b5b0492506008810190505b612710831061316f576127108381613165576131646142c1565b5b0492506004810190505b606483106131925760648381613188576131876142c1565b5b0492506002810190505b600a83106131a1576001810190505b80915050919050565b5f80600b5f8481526020019081526020015f205490508060a01c915050919050565b5f600b5f8481526020019081526020015f2054905060a07fffffffffffffffffffffffff0000000000000000000000000000000000000000901c82111561323f576040517ffcb3438c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000008260a01b1673ffffffffffffffffffffffffffffffffffffffff821601905080600b5f8581526020019081526020015f2081905550505050565b5f600b5f8481526020019081526020015f2054905073ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff0000000000000000000000000000000000000000821601905080600b5f8581526020019081526020015f2081905550505050565b5f815f015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16825f0160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16149050919050565b5f80825f0160109054906101000a90046fffffffffffffffffffffffffffffffff169050825f015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff1603613412576040517f75e52f4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600190039050826001015f826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f20549150826001015f826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580835f0160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050919050565b5f6001835f015f9054906101000a90046fffffffffffffffffffffffffffffffff16039050825f0160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff160361356e576040517f8acb5f2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81836001015f836fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080835f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61362d816135f9565b8114613637575f80fd5b50565b5f8135905061364881613624565b92915050565b5f60208284031215613663576136626135f1565b5b5f6136708482850161363a565b91505092915050565b5f8115159050919050565b61368d81613679565b82525050565b5f6020820190506136a65f830184613684565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136d5826136ac565b9050919050565b6136e5816136cb565b81146136ef575f80fd5b50565b5f81359050613700816136dc565b92915050565b5f6020828403121561371b5761371a6135f1565b5b5f613728848285016136f2565b91505092915050565b5f819050919050565b61374381613731565b82525050565b5f60208201905061375c5f83018461373a565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561379957808201518184015260208101905061377e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6137be82613762565b6137c8818561376c565b93506137d881856020860161377c565b6137e1816137a4565b840191505092915050565b5f6020820190508181035f83015261380481846137b4565b905092915050565b61381581613731565b811461381f575f80fd5b50565b5f813590506138308161380c565b92915050565b5f6020828403121561384b5761384a6135f1565b5b5f61385884828501613822565b91505092915050565b61386a816136cb565b82525050565b5f6020820190506138835f830184613861565b92915050565b5f806040838503121561389f5761389e6135f1565b5b5f6138ac858286016136f2565b92505060206138bd85828601613822565b9150509250929050565b5f805f606084860312156138de576138dd6135f1565b5b5f6138eb868287016136f2565b93505060206138fc868287016136f2565b925050604061390d86828701613822565b9150509250925092565b5f60ff82169050919050565b61392c81613917565b82525050565b5f6020820190506139455f830184613923565b92915050565b5f819050919050565b61395d8161394b565b82525050565b5f6020820190506139765f830184613954565b92915050565b61398581613679565b811461398f575f80fd5b50565b5f813590506139a08161397c565b92915050565b5f602082840312156139bb576139ba6135f1565b5b5f6139c884828501613992565b91505092915050565b5f80604083850312156139e7576139e66135f1565b5b5f6139f4858286016136f2565b9250506020613a0585828601613992565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a4181613731565b82525050565b5f613a528383613a38565b60208301905092915050565b5f602082019050919050565b5f613a7482613a0f565b613a7e8185613a19565b9350613a8983613a29565b805f5b83811015613ab9578151613aa08882613a47565b9750613aab83613a5e565b925050600181019050613a8c565b5085935050505092915050565b5f6020820190508181035f830152613ade8184613a6a565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613b24826137a4565b810181811067ffffffffffffffff82111715613b4357613b42613aee565b5b80604052505050565b5f613b556135e8565b9050613b618282613b1b565b919050565b5f67ffffffffffffffff821115613b8057613b7f613aee565b5b613b89826137a4565b9050602081019050919050565b828183375f83830152505050565b5f613bb6613bb184613b66565b613b4c565b905082815260208101848484011115613bd257613bd1613aea565b5b613bdd848285613b96565b509392505050565b5f82601f830112613bf957613bf8613ae6565b5b8135613c09848260208601613ba4565b91505092915050565b5f805f8060808587031215613c2a57613c296135f1565b5b5f613c37878288016136f2565b9450506020613c48878288016136f2565b9350506040613c5987828801613822565b925050606085013567ffffffffffffffff811115613c7a57613c796135f5565b5b613c8687828801613be5565b91505092959194509250565b613c9b81613917565b8114613ca5575f80fd5b50565b5f81359050613cb681613c92565b92915050565b613cc58161394b565b8114613ccf575f80fd5b50565b5f81359050613ce081613cbc565b92915050565b5f805f805f805f60e0888a031215613d0157613d006135f1565b5b5f613d0e8a828b016136f2565b9750506020613d1f8a828b016136f2565b9650506040613d308a828b01613822565b9550506060613d418a828b01613822565b9450506080613d528a828b01613ca8565b93505060a0613d638a828b01613cd2565b92505060c0613d748a828b01613cd2565b91505092959891949750929550565b5f8060408385031215613d9957613d986135f1565b5b5f613da6858286016136f2565b9250506020613db7858286016136f2565b9150509250929050565b5f8060408385031215613dd757613dd66135f1565b5b5f613de485828601613822565b9250506020613df585828601613822565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e4357607f821691505b602082108103613e5657613e55613dff565b5b50919050565b5f81519050919050565b5f82825260208201905092915050565b5f613e8082613e5c565b613e8a8185613e66565b9350613e9a81856020860161377c565b613ea3816137a4565b840191505092915050565b5f608082019050613ec15f830187613861565b613ece6020830186613861565b613edb604083018561373a565b8181036060830152613eed8184613e76565b905095945050505050565b5f81519050613f0681613624565b92915050565b5f60208284031215613f2157613f206135f1565b5b5f613f2e84828501613ef8565b91505092915050565b7f68747470733a2f2f6578616d706c652e636f6d2f746f6b656e2f000000000000815250565b5f81905092915050565b5f613f7182613762565b613f7b8185613f5d565b9350613f8b81856020860161377c565b80840191505092915050565b5f613fa182613f37565b601a82019150613fb18284613f67565b915081905092915050565b5f60c082019050613fcf5f830189613954565b613fdc6020830188613861565b613fe96040830187613861565b613ff6606083018661373a565b614003608083018561373a565b61401060a083018461373a565b979650505050505050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f61404f600283613f5d565b915061405a8261401b565b600282019050919050565b5f819050919050565b61407f61407a8261394b565b614065565b82525050565b5f61408f82614043565b915061409b828561406e565b6020820191506140ab828461406e565b6020820191508190509392505050565b5f6080820190506140ce5f830187613954565b6140db6020830186613923565b6140e86040830185613954565b6140f56060830184613954565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61413582613731565b915061414083613731565b9250828203905081811115614158576141576140fe565b5b92915050565b5f61416882613731565b915061417383613731565b925082820190508082111561418b5761418a6140fe565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546141e681613e2c565b6141f081866141be565b9450600182165f811461420a576001811461421f57614251565b60ff1983168652811515820286019350614251565b614228856141c8565b5f5b838110156142495781548189015260018201915060208101905061422a565b838801955050505b50505092915050565b5f61426582846141da565b915081905092915050565b5f60a0820190506142835f830188613954565b6142906020830187613954565b61429d6040830186613954565b6142aa606083018561373a565b6142b76080830184613861565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6142f882613731565b915061430383613731565b925082614313576143126142c1565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f61435582613731565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614387576143866140fe565b5b60018201905091905056fea2646970667358221220493b067529123348a6dd6fe29332406c1c2e4d2133bfe8dee3ead5870030f94864736f6c6343000818003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000271000000000000000000000000062e206b4ddd402056d881ded58c0bd87193d291300000000000000000000000062e206b4ddd402056d881ded58c0bd87193d29130000000000000000000000000000000000000000000000000000000000000004746573740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037474740000000000000000000000000000000000000000000000000000000000