[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "_operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "_approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "source", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "FundsReceived", "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": true, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "admin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "adminCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "fromChain", "type": "uint32" }, { "internalType": "bytes", "name": "payload", "type": "bytes" } ], "name": "bridgeIn", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "toChain", "type": "uint32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "bytes", "name": "payload", "type": "bytes" } ], "name": "bridgeOut", "outputs": [ { "internalType": "bytes4", "name": "selector", "type": "bytes4" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burned", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAdmin", "outputs": [ { "internalType": "address", "name": "adminAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwner", "outputs": [ { "internalType": "address", "name": "ownerAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "initPayload", "type": "bytes" } ], "name": "init", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_operator", "type": "address" }, { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "ownerCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "adminAddress", "type": "address" } ], "name": "setAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "ownerAddress", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "sourceBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "sourceExternalCall", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sourceGetChainPrepend", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint224", "name": "tokenId", "type": "uint224" } ], "name": "sourceMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "wallets", "type": "address[]" }, { "internalType": "uint224[]", "name": "tokenIds", "type": "uint224[]" } ], "name": "sourceMintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint224[]", "name": "tokenIds", "type": "uint224[]" } ], "name": "sourceMintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint224", "name": "startingTokenId", "type": "uint224" }, { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "sourceMintBatchIncremental", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "sourceTransfer", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "tokens", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" } ], "name": "tokensOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "wallet", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "tokensOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "view", "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": "tokenId", "type": "uint256" } ], "name": "transfer", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
608060405234801561001057600080fd5b50615f0c80620000216000396000f3fe60806040526004361061030c5760003560e01c806377dbd8631161019a578063b7e03661116100e1578063e8a3d4851161008a578063f2fde38b11610064578063f2fde38b14610a78578063f851a44014610a98578063fadcd09114610aad57610348565b8063e8a3d48514610a30578063e985e9c514610a45578063eb66dbcf14610a6557610348565b8063c5655fce116100bb578063c5655fce146109d0578063c839fe94146109f0578063c87b56dd14610a1057610348565b8063b7e036611461097c578063b88d4fde146109aa578063bf64a82d146109bd57610348565b806395d89b4111610143578063a9059cbb1161011d578063a9059cbb14610936578063a9fb6c7214610949578063ab67aa581461096957610348565b806395d89b41146108e1578063a22cb465146108f6578063a3ee19bc1461091657610348565b80638b4864d6116101745780638b4864d61461088c5780638da5cb5b146108ac57806395a1299a146108c157610348565b806377dbd863146108165780638462151c1461082b578063893d20e81461085857610348565b80632f745c591161025e5780634f558e79116102075780636e9960c3116101e15780636e9960c31461077f578063704b6c02146107b357806370a08231146107d357610348565b80634f558e79146106fa5780634f6ccce71461073f5780636352211e1461075f57610348565b806342842e0e1161023857806342842e0e146106a757806342966c68146106ba5780634ddf47d4146106da57610348565b80632f745c5914610653578063313ce567146106735780633b4f1b261461068757610348565b806313af4035116102c057806323250cae1161029a57806323250cae146105f057806323b872dd14610620578063275ccf2c1461063357610348565b806313af403514610591578063150b7a02146105b157806318160ddd146105d157610348565b8063081812fc116102f1578063081812fc146104c557806308a1eb201461052d578063095ea7b31461057e57610348565b806301ffc9a71461046e57806306fdde03146104a357610348565b366103485760405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b6000610352610acd565b73ffffffffffffffffffffffffffffffffffffffff16639fe7303f60046000357fffffffff00000000000000000000000000000000000000000000000000000000166040518363ffffffff1660e01b81526004016103b19291906150bc565b602060405180830381865afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f29190615146565b15610425576103ff610b6a565b90503660008037600080366000845af43d6000803e808015610420573d6000f35b3d6000fd5b3660008037333652600080602036016000347f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074545af13d6000803e808015610420573d6000f35b005b34801561047a57600080fd5b5061048e610489366004615191565b610c80565b60405190151581526020015b60405180910390f35b3480156104af57600080fd5b506104b8610eb1565b60405161049a9190615224565b3480156104d157600080fd5b506105086104e0366004615237565b60009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161049a565b34801561053957600080fd5b5061054d6105483660046152ab565b610f43565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161049a565b61046c61058c366004615322565b6112a8565b34801561059d57600080fd5b5061046c6105ac36600461534e565b611514565b3480156105bd57600080fd5b5061054d6105cc36600461536b565b611677565b3480156105dd57600080fd5b506004545b60405190815260200161049a565b3480156105fc57600080fd5b5061048e61060b366004615237565b6000908152600c602052604090205460ff1690565b61046c61062e3660046153de565b61191a565b34801561063f57600080fd5b5061046c61064e366004615464565b611935565b34801561065f57600080fd5b506105e261066e366004615322565b611c30565b34801561067f57600080fd5b5060006105e2565b34801561069357600080fd5b5061046c6106a23660046154fc565b611d09565b61046c6106b53660046153de565b611ebf565b3480156106c657600080fd5b5061046c6106d5366004615237565b611eda565b3480156106e657600080fd5b5061054d6106f536600461564b565b612055565b34801561070657600080fd5b5061048e610715366004615237565b60009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b34801561074b57600080fd5b506105e261075a366004615237565b612555565b34801561076b57600080fd5b5061050861077a366004615237565b6125e8565b34801561078b57600080fd5b507f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c954610508565b3480156107bf57600080fd5b5061046c6107ce36600461534e565b612674565b3480156107df57600080fd5b506105e26107ee36600461534e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205490565b34801561082257600080fd5b506105e261274e565b34801561083757600080fd5b5061084b61084636600461534e565b612852565b60405161049a9190615680565b34801561086457600080fd5b507fb56711ba6bd3ded7639fc335ee7524fe668a79d7558c85992e3f8494cf77277754610508565b34801561089857600080fd5b5061084b6108a73660046156c4565b6128cb565b3480156108b857600080fd5b5061050861299d565b3480156108cd57600080fd5b5061046c6108dc3660046156e6565b6129e5565b3480156108ed57600080fd5b506104b8612bc7565b34801561090257600080fd5b5061046c610911366004615724565b612bd6565b34801561092257600080fd5b5061046c61093136600461575d565b612dc5565b61046c610944366004615322565b6130a9565b34801561095557600080fd5b5061046c6109643660046157a5565b6130c4565b61046c6109773660046157c5565b613185565b34801561098857600080fd5b5061099c610997366004615831565b613274565b60405161049a92919061588a565b61046c6109b83660046157c5565b61368f565b61046c6109cb3660046157a5565b6138a9565b3480156109dc57600080fd5b5061046c6109eb366004615322565b61397f565b3480156109fc57600080fd5b5061084b610a0b3660046158c5565b613ac9565b348015610a1c57600080fd5b506104b8610a2b366004615237565b613be2565b348015610a3c57600080fd5b506104b8613c2a565b348015610a5157600080fd5b5061048e610a603660046158fa565b613d4b565b61046c610a733660046157a5565b613d9a565b348015610a8457600080fd5b5061046c610a9336600461534e565b613e50565b348015610aa457600080fd5b50610508613fa7565b348015610ab957600080fd5b5061046c610ac8366004615237565b613fd1565b6000610af77fb4107f746e9496e8452accc7de63d1c5e14c19f510932daa04077cd49e8bd77a5490565b73ffffffffffffffffffffffffffffffffffffffff1663ebac15f96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b659190615928565b905090565b6000610b947fb4107f746e9496e8452accc7de63d1c5e14c19f510932daa04077cd49e8bd77a5490565b73ffffffffffffffffffffffffffffffffffffffff16635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c029190615928565b6040517fcc2913f900000000000000000000000000000000000000000000000000000000815271486f6c6f6772617068526f79616c74696573600482015273ffffffffffffffffffffffffffffffffffffffff919091169063cc2913f990602401602060405180830381865afa158015610b41573d6000803e3d6000fd5b600080610c8b610acd565b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074546040517f9fe7303f0000000000000000000000000000000000000000000000000000000081529192509073ffffffffffffffffffffffffffffffffffffffff831690639fe7303f90610d069060029088906004016150bc565b602060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190615146565b80610de257506040517f9fe7303f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831690639fe7303f90610da190600490889082016150bc565b602060405180830381865afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190615146565b80610e9857506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008516600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190615146565b15610ea7575060019392505050565b5060009392505050565b606060018054610ec090615945565b80601f0160208091040260200160405190810160405280929190818152602001828054610eec90615945565b8015610f395780601f10610f0e57610100808354040283529160200191610f39565b820191906000526020600020905b815481529060010190602001808311610f1c57829003601f168201915b5050505050905090565b6000610f6d7fb4107f746e9496e8452accc7de63d1c5e14c19f510932daa04077cd49e8bd77a5490565b73ffffffffffffffffffffffffffffffffffffffff16630fffbaf36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190615928565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20627269646765206f6e6c792063616c6c000000000000000060448201526064015b60405180910390fd5b6000808080611085868801886157c5565b93509350935093506110bb8260009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b15611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c72656164792065786973747300000000604482015260640161106b565b6000828152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905561116083836140a1565b61116a60016142ee565b1561127b5761121563f0f5407360e01b8986868686604051602401611193959493929190615998565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614320565b61127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f484f4c4f47524150483a2062726964676520696e206661696c65640000000000604482015260640161106b565b507f08a1eb2000000000000000000000000000000000000000000000000000000000979650505050505050565b60008181526006602052604090205473ffffffffffffffffffffffffffffffffffffffff90811690831681900361133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a2063616e6e6f7420617070726f76652073656c660000000000604482015260640161106b565b611345338361437d565b6113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a206e6f7420617070726f7665642073656e6465720000000000604482015260640161106b565b6113b560046142ee565b1561141f5760405173ffffffffffffffffffffffffffffffffffffffff80831660248301528416604482015260648101839052611416907f47abf3be0000000000000000000000000000000000000000000000000000000090608401611193565b61141f57600080fd5b60008281526007602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a46114a560036142ee565b1561150f5760405173ffffffffffffffffffffffffffffffffffffffff80831660248301528416604482015260648101839052611506907f900f66ef0000000000000000000000000000000000000000000000000000000090608401611193565b61150f57600080fd5b505050565b7fb56711ba6bd3ded7639fc335ee7524fe668a79d7558c85992e3f8494cf7727775473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a206f776e6572206f6e6c792066756e6374696f6e0000604482015260640161106b565b60006115f47fb56711ba6bd3ded7639fc335ee7524fe668a79d7558c85992e3f8494cf7727775490565b9050817fb56711ba6bd3ded7639fc335ee7524fe668a79d7558c85992e3f8494cf772777558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061168286614489565b6116e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433732313a206f70657261746f72206e6f7420636f6e7472616374000000604482015260640161106b565b6116f2600f6142ee565b156117265761171d6368fd76b260e01b878730888888604051602401611193969594939291906159ee565b61172657600080fd5b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff871690636352211e90602401602060405180830381865afa9250505080156117cb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526117c891810190615928565b60015b611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20646f6573206e6f7420657869737400000000604482015260640161106b565b73ffffffffffffffffffffffffffffffffffffffff811630146118b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a20636f6e7472616374206e6f7420746f6b656e206f776e6572604482015260640161106b565b506118bb60106142ee565b156118ef576118e663462b401a60e01b878730888888604051602401611193969594939291906159ee565b6118ef57600080fd5b507f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b61150f83838360405180602001604052806000815250613185565b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074543373ffffffffffffffffffffffffffffffffffffffff8216146119d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20736f75726365206f6e6c792063616c6c0000000000000000604482015260640161106b565b838214611a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4552433732313a206172726179206c656e677468206d6973736d617463680000604482015260640161106b565b6103e88210611aaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4552433732313a206d61782062617463682073697a6520697320313030300000604482015260640161106b565b6000611ab46144c0565b90506000805b84811015611c265782868683818110611ad557611ad5615a76565b9050602002016020810190611aea9190615aa5565b604051602001611b5092919060e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000168252602090811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001660048301520190565b604051602081830303815290604052611b6890615ac0565b6000818152600c602052604090205490925060ff1615611be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433732313a2063616e2774206d696e74206275726e656420746f6b656e00604482015260640161106b565b611c14888883818110611bf957611bf9615a76565b9050602002016020810190611c0e919061534e565b836140a1565b80611c1e81615b31565b915050611aba565b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600860205260408120548210611cbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a20696e646578206f7574206f6620626f756e64730000000000604482015260640161106b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020805483908110611cf557611cf5615a76565b906000526020600020015490505b92915050565b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074543373ffffffffffffffffffffffffffffffffffffffff821614611daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20736f75726365206f6e6c792063616c6c0000000000000000604482015260640161106b565b6000611db46144c0565b83604051602001611e1b92919060e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000168252602090811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001660048301520190565b604051602081830303815290604052611e3390615ac0565b6000818152600c602052604090205490915060ff1615611eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433732313a2063616e2774206d696e74206275726e656420746f6b656e00604482015260640161106b565b611eb984826140a1565b50505050565b61150f8383836040518060200160405280600081525061368f565b611ee43382614630565b611f4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a206e6f7420617070726f7665642073656e6465720000000000604482015260640161106b565b60008181526006602052604090205473ffffffffffffffffffffffffffffffffffffffff16611f7960086142ee565b15611fdb5760405173ffffffffffffffffffffffffffffffffffffffff8216602482015260448101839052611fd2907f4a1fefbd0000000000000000000000000000000000000000000000000000000090606401611193565b611fdb57600080fd5b611fe58183614764565b611fef60076142ee565b156120515760405173ffffffffffffffffffffffffffffffffffffffff8216602482015260448101839052612048907f971c34b40000000000000000000000000000000000000000000000000000000090606401611193565b61205157600080fd5b5050565b600061207f7f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a015490565b156120e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a20616c726561647920696e697469616c697a65640000000000604482015260640161106b565b6000337fb56711ba6bd3ded7639fc335ee7524fe668a79d7558c85992e3f8494cf772777557f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b0745490506000806000806000808880602001905181019061214c9190615bae565b955095509550955095509550856001908051906020019061216e929190614fd7565b508451612182906002906020880190614fd7565b50600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff86161790556000839055816124fe576040517f4ddf47d4000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff891690634ddf47d49061220f908590600401615224565b6020604051808303816000875af115801561222e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122529190615c6c565b7fffffffff0000000000000000000000000000000000000000000000000000000016146122db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433732313a20636f756c64206e6f7420696e697420736f75726365000000604482015260640161106b565b6000806122e6610b6a565b73ffffffffffffffffffffffffffffffffffffffff16631aff107760e01b8761ffff166000604051602001612325929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261236091602401615224565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516123e99190615c89565b600060405180830381855af49150503d8060008114612424576040519150601f19603f3d011682016040523d82523d6000602084013e612429565b606091505b50915091506000818060200190518101906124449190615c6c565b905082801561249457507fffffffff0000000000000000000000000000000000000000000000000000000081167f4ddf47d400000000000000000000000000000000000000000000000000000000145b6124fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a20636f756c64206e6f7420696e697420726f79616c74696573604482015260640161106b565b5050505b61252760017f4e5f991bca30eca2d4643aaefa807e88f96a4a97398933d572a3c0d973004a0155565b507f4ddf47d40000000000000000000000000000000000000000000000000000000098975050505050505050565b60045460009082106125c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a20696e646578206f7574206f6620626f756e64730000000000604482015260640161106b565b600482815481106125d6576125d6615a76565b90600052602060002001549050919050565b60008181526006602052604081205473ffffffffffffffffffffffffffffffffffffffff1680611d03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20646f6573206e6f7420657869737400000000604482015260640161106b565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e0000604482015260640161106b565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c955565b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074546000903373ffffffffffffffffffffffffffffffffffffffff8216146127f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20736f75726365206f6e6c792063616c6c0000000000000000604482015260640161106b565b6127fa6144c0565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020830152600060248301520160405160208183030381529060405261284b90615ac0565b91505b5090565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600960209081526040918290208054835181840281018401909452808452606093928301828280156128bf57602002820191906000526020600020905b8154815260200190600101908083116128ab575b50505050509050919050565b600454606090806128dc8486615ca5565b11156128ef576128ec8482615cbd565b92505b8267ffffffffffffffff81111561290857612908615531565b604051908082528060200260200182016040528015612931578160200160208202803683370190505b50915060005b8381101561299557600461294b8287615ca5565b8154811061295b5761295b615a76565b906000526020600020015483828151811061297857612978615a76565b60209081029190910101528061298d81615b31565b915050612937565b505092915050565b600036600080373336526000806020360160007f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074545afa3d6000803e808015610420573d6000f35b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074543373ffffffffffffffffffffffffffffffffffffffff821614612a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20736f75726365206f6e6c792063616c6c0000000000000000604482015260640161106b565b6000612a906144c0565b84604051602001612af792919060e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000168252602090811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001660048301520190565b604051602081830303815290604052612b0f90615ac0565b905060005b83811015612bbf576000828152600c602052604090205460ff1615612b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433732313a2063616e2774206d696e74206275726e656420746f6b656e00604482015260640161106b565b612b9f86836140a1565b81612ba981615b31565b9250508080612bb790615b31565b915050612b14565b505050505050565b606060028054610ec090615945565b3373ffffffffffffffffffffffffffffffffffffffff831603612c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a2063616e6e6f7420617070726f76652073656c660000000000604482015260640161106b565b612c5f60066142ee565b15612cc85760405133602482015273ffffffffffffffffffffffffffffffffffffffff831660448201528115156064820152612cbf907f0d3919150000000000000000000000000000000000000000000000000000000090608401611193565b612cc857600080fd5b336000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3612d6560056142ee565b156120515760405133602482015273ffffffffffffffffffffffffffffffffffffffff831660448201528115156064820152612048907fb6d3d5b70000000000000000000000000000000000000000000000000000000090608401611193565b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074543373ffffffffffffffffffffffffffffffffffffffff821614612e66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20736f75726365206f6e6c792063616c6c0000000000000000604482015260640161106b565b6103e88210612ed1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4552433732313a206d61782062617463682073697a6520697320313030300000604482015260640161106b565b6000612edb6144c0565b90506000805b848110156130a0576000828152600c602052604090205460ff1615612f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433732313a2063616e2774206d696e74206275726e656420746f6b656e00604482015260640161106b565b82868683818110612f7557612f75615a76565b9050602002016020810190612f8a9190615aa5565b604051602001612ff092919060e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000168252602090811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001660048301520190565b60405160208183030381529060405261300890615ac0565b6000818152600c602052604090205490925060ff1615613084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433732313a2063616e2774206d696e74206275726e656420746f6b656e00604482015260640161106b565b61308e87836140a1565b8061309881615b31565b915050612ee1565b50505050505050565b61205133838360405180602001604052806000815250613185565b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074543373ffffffffffffffffffffffffffffffffffffffff821614613165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20736f75726365206f6e6c792063616c6c0000000000000000604482015260640161106b565b818360003760008083600034885af13d6000803e808015610420573d6000f35b61318f3383614630565b6131f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a206e6f7420617070726f7665642073656e6465720000000000604482015260640161106b565b6131ff600e6142ee565b1561322f5761322663343b278f60e01b858585856040516024016111939493929190615cd4565b61322f57600080fd5b61323a84848461481c565b613244600d6142ee565b15611eb95761326b630668af8060e01b858585856040516024016111939493929190615cd4565b611eb957600080fd5b600060606132a07fb4107f746e9496e8452accc7de63d1c5e14c19f510932daa04077cd49e8bd77a5490565b73ffffffffffffffffffffffffffffffffffffffff16630fffbaf36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330e9190615928565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20627269646765206f6e6c792063616c6c0000000000000000604482015260640161106b565b600080806133b2868801886153de565b9194509250905073ffffffffffffffffffffffffffffffffffffffff8216613436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4552433732313a207a65726f2061646472657373000000000000000000000000604482015260640161106b565b6134408882614630565b6134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a2073656e646572206e6f7420617070726f7665640000000000604482015260640161106b565b60008181526006602052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a2066726f6d206973206e6f74206f776e657200000000000000604482015260640161106b565b61354060026142ee565b1561362d576040805163ffffffff8b16602482015273ffffffffffffffffffffffffffffffffffffffff85811660448301528416606482015260848082018490528251808303909101815260a4909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8b1465c60000000000000000000000000000000000000000000000000000000017815282513390840183015282517f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b0745460009384939201919034905af160203d036020873e8080613629573d6000fd5b5050505b6136378382614764565b6040517fb7e036610000000000000000000000000000000000000000000000000000000090613670908590859085908990602001615cd4565b6040516020818303038152906040529450945050505094509492505050565b6136993383614630565b6136ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732313a206e6f7420617070726f7665642073656e6465720000000000604482015260640161106b565b613709600c6142ee565b1561373957613730632ca1667660e01b858585856040516024016111939493929190615cd4565b61373957600080fd5b61374484848461481c565b61374d83614489565b15613878576040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906137ac903390899088908890600401615cd4565b6020604051808303816000875af11580156137cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ef9190615c6c565b7fffffffff000000000000000000000000000000000000000000000000000000001614613878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433732313a206f6e4552433732315265636569766564206661696c000000604482015260640161106b565b613882600b6142ee565b15611eb95761326b6336fff06260e01b858585856040516024016111939493929190615cd4565b7f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461395f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a2061646d696e206f6e6c792066756e6374696f6e0000604482015260640161106b565b808260003760008082600034875af13d6000803e808015610420573d6000f35b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074543373ffffffffffffffffffffffffffffffffffffffff821614613a20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20736f75726365206f6e6c792063616c6c0000000000000000604482015260640161106b565b6000828152600c602052604090205460ff1615613a99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433732313a20746f6b656e20686173206265656e206275726e6564000000604482015260640161106b565b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff16611eb981858561481c565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604090205460609080613afd8486615ca5565b1115613b1057613b0d8482615cbd565b92505b8267ffffffffffffffff811115613b2957613b29615531565b604051908082528060200260200182016040528015613b52578160200160208202803683370190505b50915060005b83811015613bd95773ffffffffffffffffffffffffffffffffffffffff86166000908152600960205260409020613b8f8287615ca5565b81548110613b9f57613b9f615a76565b9060005260206000200154838281518110613bbc57613bbc615a76565b602090810291909101015280613bd181615b31565b915050613b58565b50509392505050565b606036600080373336526000806020360160007f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074545afa3d6000803e808015610420573d6000f35b6060613c3660126142ee565b15613c815736600080373336526000806020360160007f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074545afa3d6000803e808015610420573d6000f35b613c89610acd565b6003546040517f9cf149da00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921691639cf149da91613ce89160019161ffff16903090600401615d1d565b600060405180830381865afa158015613d05573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b659190810190615e49565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600a6020908152604080832093851683529290529081205460ff1680613d935750613d9383836149c8565b9392505050565b7fb56711ba6bd3ded7639fc335ee7524fe668a79d7558c85992e3f8494cf7727775473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461395f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a206f776e6572206f6e6c792066756e6374696f6e0000604482015260640161106b565b7fb56711ba6bd3ded7639fc335ee7524fe668a79d7558c85992e3f8494cf7727775473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f484f4c4f47524150483a206f776e6572206f6e6c792066756e6374696f6e0000604482015260640161106b565b73ffffffffffffffffffffffffffffffffffffffff8116613f83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f484f4c4f47524150483a207a65726f2061646472657373000000000000000000604482015260640161106b565b7fb56711ba6bd3ded7639fc335ee7524fe668a79d7558c85992e3f8494cf77277755565b6000610b657f3f106594dc74eeef980dae234cde8324dc2497b13d27a0c59e55bd2ca10a07c95490565b7f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074543373ffffffffffffffffffffffffffffffffffffffff821614614072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20736f75726365206f6e6c792063616c6c0000000000000000604482015260640161106b565b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1661150f8184614764565b6000811161410b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433732313a20746f6b656e2069642063616e6e6f74206265207a65726f00604482015260640161106b565b73ffffffffffffffffffffffffffffffffffffffff8216614188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433732313a206d696e74696e6720746f206275726e206164647265737300604482015260640161106b565b60008181526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1615614214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c72656164792065786973747300000000604482015260640161106b565b6000818152600c602052604090205460ff161561428d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433732313a20746f6b656e20686173206265656e206275726e6564000000604482015260640161106b565b600081815260066020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556142e4908383614aa4565b6120518282614c60565b600060018260128111156143045761430461508d565b600054901c16600114614318576000611d03565b600192915050565b6000336020835101830152600080602084510160208501347f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074545af16040513d81016040523d6000823e8180614374573d82fd5b50519392505050565b60008181526006602052604081205473ffffffffffffffffffffffffffffffffffffffff16614408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20646f6573206e6f7420657869737400000000604482015260640161106b565b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416811480614471575073ffffffffffffffffffffffffffffffffffffffff8082166000908152600a602090815260408083209388168352929052205460ff165b80614481575061448181856149c8565b949350505050565b6000813f8015801590613d9357507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b6000803073ffffffffffffffffffffffffffffffffffffffff16634827ae0c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561450e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145329190615928565b73ffffffffffffffffffffffffffffffffffffffff1663381b5f466040518163ffffffff1660e01b8152600401602060405180830381865afa15801561457c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145a09190615e7e565b90503073ffffffffffffffffffffffffffffffffffffffff1663913a0ef26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146119190615e7e565b63ffffffff168163ffffffff161461462857919050565b600091505090565b60008181526006602052604081205473ffffffffffffffffffffffffffffffffffffffff166146bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20646f6573206e6f7420657869737400000000604482015260640161106b565b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416811480614718575060008381526007602052604090205473ffffffffffffffffffffffffffffffffffffffff8581169116145b80614471575073ffffffffffffffffffffffffffffffffffffffff8082166000908152600a602090815260408083209388168352929052205460ff1680614481575061448181856149c8565b600081815260076020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055600081815260066020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556147d890839083614aa4565b6147e28282614d27565b6000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b60008181526006602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116146148ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732313a20746f6b656e206e6f74206f776e6564000000000000000000604482015260640161106b565b73ffffffffffffffffffffffffffffffffffffffff8216614929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20757365206275726e20696e73746561640000000000000000604482015260640161106b565b600081815260076020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055600081815260066020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556149b4838383614aa4565b6149be8382614d27565b61150f8282614c60565b60006149d460116142ee565b15611d03577f27d542086d1e831d40b749e7f5509a626c3047a36d160781c40d5acc83e5b074546040517f015eaa7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152848116602483015282169063015eaa7a90604401602060405180830381865afa158015614a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a939190615146565b15614a9d57600191505b5092915050565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a47fb4107f746e9496e8452accc7de63d1c5e14c19f510932daa04077cd49e8bd77a5473ffffffffffffffffffffffffffffffffffffffff16635ab1bd536040518163ffffffff1660e01b8152600401602060405180830381865afa158015614b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b8f9190615928565b604080517f351b8d13789e4d8d2717631559251955685881a31494dd0b8b19b4ef8530bb6d602082015273ffffffffffffffffffffffffffffffffffffffff86811682840152858116606083015260808083018690528351808403909101815260a08301938490527fafa5886e00000000000000000000000000000000000000000000000000000000909352929092169163afa5886e91614c329160a401615224565b600060405180830381600087803b158015614c4c57600080fd5b505af11580156130a0573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526008602081815260408084208054878652600584529185208290559484529190529190614ca883615b31565b909155505073ffffffffffffffffffffffffffffffffffffffff90911660009081526009602090815260408083208054600181810183559185528385200185905560048054868652600b909452918420839055820181559091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0155565b614d3081614f25565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600860205260408120805491614d6183615e9b565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600090815260086020908152604080832054848452600590925290912054808214614e575773ffffffffffffffffffffffffffffffffffffffff84166000908152600960205260408120805484908110614dd957614dd9615a76565b9060005260206000200154905080600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110614e3757614e37615a76565b600091825260208083209091019290925591825260059052604090208190555b81600003614e925773ffffffffffffffffffffffffffffffffffffffff84166000908152600960205260408120614e8d91615057565b611eb9565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600960205260409020805483908110614ec957614ec9615a76565b6000918252602080832090910182905573ffffffffffffffffffffffffffffffffffffffff861682526009905260409020805480614f0957614f09615ed0565b6001900381819060005260206000200160009055905550505050565b600454600090614f3790600190615cbd565b6000838152600b602052604081205460048054939450909284908110614f5f57614f5f615a76565b906000526020600020015490508060048381548110614f8057614f80615a76565b6000918252602080832090910192909255828152600b90915260408082208490558582528120556004805484908110614fbb57614fbb615a76565b60009182526020822001556004805480614f0957614f09615ed0565b828054614fe390615945565b90600052602060002090601f016020900481019282615005576000855561504b565b82601f1061501e57805160ff191683800117855561504b565b8280016001018555821561504b579182015b8281111561504b578251825591602001919060010190615030565b5061284e929150615078565b50805460008255906000526020600020908101906150759190615078565b50565b5b8082111561284e5760008155600101615079565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60408101600684106150f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9281527fffffffff000000000000000000000000000000000000000000000000000000009190911660209091015290565b801515811461507557600080fd5b805161514181615128565b919050565b60006020828403121561515857600080fd5b8151613d9381615128565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461507557600080fd5b6000602082840312156151a357600080fd5b8135613d9381615163565b60005b838110156151c95781810151838201526020016151b1565b83811115611eb95750506000910152565b600081518084526151f28160208601602086016151ae565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613d9360208301846151da565b60006020828403121561524957600080fd5b5035919050565b63ffffffff8116811461507557600080fd5b60008083601f84011261527457600080fd5b50813567ffffffffffffffff81111561528c57600080fd5b6020830191508360208285010111156152a457600080fd5b9250929050565b6000806000604084860312156152c057600080fd5b83356152cb81615250565b9250602084013567ffffffffffffffff8111156152e757600080fd5b6152f386828701615262565b9497909650939450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461507557600080fd5b6000806040838503121561533557600080fd5b823561534081615300565b946020939093013593505050565b60006020828403121561536057600080fd5b8135613d9381615300565b60008060008060006080868803121561538357600080fd5b853561538e81615300565b9450602086013561539e81615300565b935060408601359250606086013567ffffffffffffffff8111156153c157600080fd5b6153cd88828901615262565b969995985093965092949392505050565b6000806000606084860312156153f357600080fd5b83356153fe81615300565b9250602084013561540e81615300565b929592945050506040919091013590565b60008083601f84011261543157600080fd5b50813567ffffffffffffffff81111561544957600080fd5b6020830191508360208260051b85010111156152a457600080fd5b6000806000806040858703121561547a57600080fd5b843567ffffffffffffffff8082111561549257600080fd5b61549e8883890161541f565b909650945060208701359150808211156154b757600080fd5b506154c48782880161541f565b95989497509550505050565b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461514157600080fd5b6000806040838503121561550f57600080fd5b823561551a81615300565b9150615528602084016154d0565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156155a7576155a7615531565b604052919050565b600067ffffffffffffffff8211156155c9576155c9615531565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261560657600080fd5b8135615619615614826155af565b615560565b81815284602083860101111561562e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561565d57600080fd5b813567ffffffffffffffff81111561567457600080fd5b614481848285016155f5565b6020808252825182820181905260009190848201906040850190845b818110156156b85783518352928401929184019160010161569c565b50909695505050505050565b600080604083850312156156d757600080fd5b50508035926020909101359150565b6000806000606084860312156156fb57600080fd5b833561570681615300565b9250615714602085016154d0565b9150604084013590509250925092565b6000806040838503121561573757600080fd5b823561574281615300565b9150602083013561575281615128565b809150509250929050565b60008060006040848603121561577257600080fd5b833561577d81615300565b9250602084013567ffffffffffffffff81111561579957600080fd5b6152f38682870161541f565b6000806000604084860312156157ba57600080fd5b83356152cb81615300565b600080600080608085870312156157db57600080fd5b84356157e681615300565b935060208501356157f681615300565b925060408501359150606085013567ffffffffffffffff81111561581957600080fd5b615825878288016155f5565b91505092959194509250565b6000806000806060858703121561584757600080fd5b843561585281615250565b9350602085013561586281615300565b9250604085013567ffffffffffffffff81111561587e57600080fd5b6154c487828801615262565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260406020820152600061448160408301846151da565b6000806000606084860312156158da57600080fd5b83356158e581615300565b95602085013595506040909401359392505050565b6000806040838503121561590d57600080fd5b823561591881615300565b9150602083013561575281615300565b60006020828403121561593a57600080fd5b8151613d9381615300565b600181811c9082168061595957607f821691505b602082108103615992577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b63ffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff808716602084015280861660408401525083606083015260a060808301526159e360a08301846151da565b979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8089168352808816602084015280871660408401525084606083015260a060808301528260a0830152828460c0840137600060c0848401015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501168301019050979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215615ab757600080fd5b613d93826154d0565b80516020808301519190811015615992577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615b6257615b62615b02565b5060010190565b600082601f830112615b7a57600080fd5b8151615b88615614826155af565b818152846020838601011115615b9d57600080fd5b6144818260208301602087016151ae565b60008060008060008060c08789031215615bc757600080fd5b865167ffffffffffffffff80821115615bdf57600080fd5b615beb8a838b01615b69565b97506020890151915080821115615c0157600080fd5b615c0d8a838b01615b69565b96506040890151915061ffff82168214615c2657600080fd5b81955060608901519450615c3c60808a01615136565b935060a0890151915080821115615c5257600080fd5b50615c5f89828a01615b69565b9150509295509295509295565b600060208284031215615c7e57600080fd5b8151613d9381615163565b60008251615c9b8184602087016151ae565b9190910192915050565b60008219821115615cb857615cb8615b02565b500190565b600082821015615ccf57615ccf615b02565b500390565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152615d1360808301846151da565b9695505050505050565b60a08152600080855481600182811c915080831680615d3d57607f831692505b60208084108203615d75577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b60a0880184905260c08801828015615d945760018114615dc357615dee565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00871682528282019750615dee565b60008d81526020902060005b87811015615de857815484820152908601908401615dcf565b83019850505b505087860390880152505060008352505060208101838103604085015260008152905060208101915050615e28606083018561ffff169052565b73ffffffffffffffffffffffffffffffffffffffff83166080830152614481565b600060208284031215615e5b57600080fd5b815167ffffffffffffffff811115615e7257600080fd5b61448184828501615b69565b600060208284031215615e9057600080fd5b8151613d9381615250565b600081615eaa57615eaa615b02565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c634300080d000a