{
  "_format": "hh3-artifact-1",
  "contractName": "LSP7Mintable",
  "sourceName": "contracts/presets/LSP7Mintable.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "newOwner_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "lsp4TokenType_",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isNonDivisible_",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AccessControlCannotSetAdminForDefaultAdminRole",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC725Y_DataKeysValuesEmptyArray",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC725Y_DataKeysValuesLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC725Y_MsgValueDisallowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "storedData",
          "type": "bytes"
        }
      ],
      "name": "InvalidExtensionAddress",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "InvalidFunctionSelector",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP4TokenNameNotEditable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP4TokenSymbolNotEditable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP4TokenTypeNotEditable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "authorizedAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LSP7AmountExceedsAuthorizedAmount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LSP7AmountExceedsBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "callIndex",
          "type": "uint256"
        }
      ],
      "name": "LSP7BatchCallFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7CannotSendWithAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7CannotUseAddressZeroAsOperator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "LSP7DecreaseAllowanceNotAuthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7DecreasedAllowanceBelowZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7InvalidTransferBatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7MintDisabled",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenReceiver",
          "type": "address"
        }
      ],
      "name": "LSP7NotifyTokenReceiverContractMissingLSP1Interface",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenReceiver",
          "type": "address"
        }
      ],
      "name": "LSP7NotifyTokenReceiverIsEOA",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "LSP7RevokeOperatorNotAuthorized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7TokenContractCannotHoldValue",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LSP7TokenOwnerCannotBeOperator",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "functionSelector",
          "type": "bytes4"
        }
      ],
      "name": "NoExtensionFoundForFunctionSelector",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "OperatorAllowanceCannotBeIncreasedFromZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnableCannotSetZeroAddressAsOwner",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "dataKey",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "dataValue",
          "type": "bytes"
        }
      ],
      "name": "DataChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "MintingStatusChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "OperatorAuthorizationChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "notified",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "OperatorRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "force",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "authorizeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        }
      ],
      "name": "authorizedAmountFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "batchCalls",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedAmount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disableMinting",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "dataKey",
          "type": "bytes32"
        }
      ],
      "name": "getData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "dataValue",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "dataKeys",
          "type": "bytes32[]"
        }
      ],
      "name": "getDataBatch",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "dataValues",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        }
      ],
      "name": "getOperatorsOf",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMembers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedAmount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isMintable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "force",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "notify",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "operatorNotificationData",
          "type": "bytes"
        }
      ],
      "name": "revokeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "rolesOf",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "dataKey",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "dataValue",
          "type": "bytes"
        }
      ],
      "name": "setData",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "dataKeys",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes[]",
          "name": "dataValues",
          "type": "bytes[]"
        }
      ],
      "name": "setDataBatch",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "adminRole",
          "type": "bytes32"
        }
      ],
      "name": "setRoleAdmin",
      "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": "totalSupply",
      "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": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "force",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "transfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "from",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "to",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amount",
          "type": "uint256[]"
        },
        {
          "internalType": "bool[]",
          "name": "force",
          "type": "bool[]"
        },
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "transferBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a060405234801561000f575f5ffd5b506040516144bc3803806144bc83398101604081905261002e91610721565b600185858585858484848481610043336101ea565b6001600160a01b03811661006a576040516306b620db60e21b815260040160405180910390fd5b6100738161020d565b506040805180820190915260048152632936598960e21b60208201526100ba907feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c9061025c565b6100e47fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af18561025c565b61010e7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db9327568461025c565b6040805160208101839052610155917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb3910160408051601f1981840301815291905261025c565b50505050151560805250505f805461017e93509091506001600160a01b03166102b0565b6102b0565b6009805460ff19168215159081179091556040517f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4905f90a280156101df576101df5f51602061449c5f395f51905f526101795f546001600160a01b031690565b505050505050610980565b6102015f51602061449c5f395f51905f525f61032e565b61020a81610393565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828152600160205260409020610273828261084a565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2826040516102a49190610904565b60405180910390a25050565b5f8281526007602052604081206102c79083610429565b90508015610329576001600160a01b0382165f9081526008602052604090206102f09084610446565b5060405133906001600160a01b0384169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a45b505050565b8161034c5760405163d0dc904b60e01b815260040160405180910390fd5b5f82815260066020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f546001600160a01b03166103a78261020d565b6001600160a01b0381165f9081526008602052604081206103c790610451565b90505f5b8151811015610423575f8282815181106103e7576103e7610939565b60200260200101519050610401818561046460201b60201c565b6001600160a01b0385161561041a5761041a81866102b0565b506001016103cb565b50505050565b5f61043d836001600160a01b0384166104e1565b90505b92915050565b5f61043d83836104e1565b60605f61045d8361052d565b9392505050565b5f82815260076020526040812061047b9083610586565b90508015610329576001600160a01b0382165f9081526008602052604090206104a4908461059a565b5060405133906001600160a01b0384169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b5f81815260018301602052604081205461052657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610440565b505f610440565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561057a57602002820191905f5260205f20905b815481526020019060010190808311610566575b50505050509050919050565b5f61043d836001600160a01b0384166105a1565b5f61043d83835b5f818152600183016020526040812054801561067b575f6105c360018361094d565b85549091505f906105d69060019061094d565b9050818114610635575f865f0182815481106105f4576105f4610939565b905f5260205f200154905080875f01848154811061061457610614610939565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806106465761064661096c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610440565b5f915050610440565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126106a7575f5ffd5b81516001600160401b038111156106c0576106c0610684565b604051601f8201601f19908116603f011681016001600160401b03811182821017156106ee576106ee610684565b604052818152838201602001851015610705575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f5f60a08688031215610735575f5ffd5b85516001600160401b0381111561074a575f5ffd5b61075688828901610698565b602088015190965090506001600160401b03811115610773575f5ffd5b61077f88828901610698565b604088015190955090506001600160a01b038116811461079d575f5ffd5b60608701516080880151919450925080151581146107b9575f5ffd5b809150509295509295909350565b600181811c908216806107db57607f821691505b6020821081036107f957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561032957805f5260205f20601f840160051c810160208510156108245750805b601f840160051c820191505b81811015610843575f8155600101610830565b5050505050565b81516001600160401b0381111561086357610863610684565b6108778161087184546107c7565b846107ff565b6020601f8211600181146108a9575f83156108925750848201515b5f19600385901b1c1916600184901b178455610843565b5f84815260208120601f198516915b828110156108d857878501518255602094850194600190920191016108b8565b50848210156108f557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561044057634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b608051613b046109985f395f610c980152613b045ff3fe608060405260043610610237575f3560e01c80637580d92011610137578063a217fddf116100af578063d53913931161007e578063d72fc29a11610063578063d72fc29a1461077b578063dedff9c61461079a578063f2fde38b146107b9576102c2565b8063d539139314610729578063d547741f1461075c576102c2565b8063a217fddf146106ac578063a3246ad3146106bf578063b49506fd146106eb578063ca15c8731461070a576102c2565b80637f23690c116101065780639010d07c116100eb5780639010d07c1461065b57806391d148541461067a5780639790242114610699576102c2565b80637f23690c146105fe5780638da5cb5b14610611576102c2565b80637580d9201461058d578063760d9bba146105ac57806378381670146105cb5780637e5cd5c1146105ea576102c2565b806330d0dc37116101ca57806354f6127f116101995780636963d4381161017e5780636963d4381461050c57806370a0823114610538578063715018a614610579576102c2565b806354f6127f146104c157806365aeaa95146104ed576102c2565b806330d0dc3714610444578063313ce5671461046357806336568abe1461048957806346b45af7146104a8576102c2565b80632bc1da82116102065780632bc1da82146103bb5780632d7667c9146103da5780632de94807146103f95780632f2ff15d14610425576102c2565b806301ffc9a71461031d57806318160ddd146103515780631e4e00911461036f578063248a9ca314610390576102c2565b366102c257345f03610290576040517fe5099ee30000000000000000000000000000000000000000000000000000000081526004016102879060208082526004908201525f604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f36606082826004811015610305576040517fe5099ee3000000000000000000000000000000000000000000000000000000008152600401610287929190612bf9565b505061031183836107d8565b80519350602001915050f35b348015610328575f5ffd5b5061033c610337366004612c45565b61096d565b60405190151581526020015b60405180910390f35b34801561035c575f5ffd5b506002545b604051908152602001610348565b34801561037a575f5ffd5b5061038e610389366004612c84565b610986565b005b34801561039b575f5ffd5b506103616103aa366004612ca4565b5f9081526006602052604090205490565b3480156103c6575f5ffd5b5061038e6103d5366004612df6565b61099f565b3480156103e5575f5ffd5b5061038e6103f4366004613023565b610a52565b348015610404575f5ffd5b50610418610413366004613106565b610b57565b604051610348919061311f565b348015610430575f5ffd5b5061038e61043f366004613161565b610b87565b34801561044f575f5ffd5b5061038e61045e36600461318b565b610ba8565b34801561046e575f5ffd5b50610477610c95565b60405160ff9091168152602001610348565b348015610494575f5ffd5b5061038e6104a3366004613161565b610cc6565b3480156104b3575f5ffd5b5060095461033c9060ff1681565b3480156104cc575f5ffd5b506104e06104db366004612ca4565b610da2565b6040516103489190613242565b3480156104f8575f5ffd5b50610361610507366004613254565b610dad565b348015610517575f5ffd5b5061052b61052636600461327c565b610e44565b60405161034891906132ed565b348015610543575f5ffd5b50610361610552366004613106565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b348015610584575f5ffd5b5061038e610f8f565b348015610598575f5ffd5b5061038e6105a736600461336e565b610fa2565b3480156105b7575f5ffd5b5061038e6105c636600461339f565b610fd8565b3480156105d6575f5ffd5b5061038e6105e5366004613406565b61100d565b3480156105f5575f5ffd5b5061038e611137565b61038e61060c366004613452565b6111cf565b34801561061c575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610348565b348015610666575f5ffd5b50610636610675366004612c84565b611219565b348015610685575f5ffd5b5061033c610694366004613161565b611237565b61038e6106a7366004613496565b611242565b3480156106b7575f5ffd5b506103615f81565b3480156106ca575f5ffd5b506106de6106d9366004612ca4565b61128c565b60405161034891906134f1565b3480156106f6575f5ffd5b5061038e610705366004612df6565b6112a5565b348015610715575f5ffd5b50610361610724366004612ca4565b6112e4565b348015610734575f5ffd5b506103617f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b348015610767575f5ffd5b5061038e610776366004613161565b6112fa565b348015610786575f5ffd5b506106de610795366004613106565b61139d565b3480156107a5575f5ffd5b5061052b6107b436600461353e565b6113cd565b3480156107c4575f5ffd5b5061038e6107d3366004613106565b611477565b60605f6108075f357fffffffff000000000000000000000000000000000000000000000000000000001661152e565b5090507fffffffff000000000000000000000000000000000000000000000000000000005f351673ffffffffffffffffffffffffffffffffffffffff82166108a0576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610287565b505f5f8273ffffffffffffffffffffffffffffffffffffffff1634878733346040516020016108d29493929190613570565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261090a916135b3565b5f6040518083038185875af1925050503d805f8114610944576040519150601f19603f3d011682016040523d82523d5f602084013e610949565b606091505b5091509150811561095e579250610967915050565b80518060208301fd5b92915050565b5f610977826115ec565b806109675750610967826116cf565b5f61099081611733565b61099a838361173d565b505050565b5f6109aa8433610dad565b905083816109fd576040517fcba6e97700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610287565b505f610a0984836135f6565b9050610a193386836001876117bb565b5f338285604051602001610a2f93929190613609565b6040516020818303038152906040529050610a4a86826119df565b505050505050565b8451845181148015610a645750835181145b8015610a705750825181145b8015610a7c5750815181145b610ab2576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610b4e57610b46878281518110610ad157610ad1613646565b6020026020010151878381518110610aeb57610aeb613646565b6020026020010151878481518110610b0557610b05613646565b6020026020010151878581518110610b1f57610b1f613646565b6020026020010151878681518110610b3957610b39613646565b6020026020010151610fd8565b600101610ab4565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260086020526040902060609061096790611a0a565b5f82815260066020526040902054610b9e81611733565b61099a8383611a16565b3373ffffffffffffffffffffffffffffffffffffffff84161480610be157503373ffffffffffffffffffffffffffffffffffffffff8516145b338486909192610c46576040517f1a525b3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401610287565b505050610c5683855f85856117bb565b8115610c8f575f835f83604051602001610c7293929190613673565b6040516020818303038152906040529050610c8d85826119df565b505b50505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000610cc15750601290565b505f90565b73ffffffffffffffffffffffffffffffffffffffff81163314610d15576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81158015610d3957505f5473ffffffffffffffffffffffffffffffffffffffff1633145b1533839091610d92576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401610287565b5050610d9e8233611aad565b5050565b606061096782611b44565b5f8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e0c575073ffffffffffffffffffffffffffffffffffffffff81165f90815260036020526040902054610967565b5073ffffffffffffffffffffffffffffffffffffffff8082165f90815260056020908152604080832093861683529290522054610967565b60608167ffffffffffffffff811115610e5f57610e5f612ce3565b604051908082528060200260200182016040528015610e9257816020015b6060815260200190600190039081610e7d5790505b5090505f5b82811015610f88575f8030868685818110610eb457610eb4613646565b9050602002810190610ec691906136aa565b604051610ed4929190613712565b5f60405180830381855af49150503d805f8114610f0c576040519150601f19603f3d011682016040523d82523d5f602084013e610f11565b606091505b509150915081610f6057805115610f2b5780518082602001fd5b6040517fb774c28400000000000000000000000000000000000000000000000000000000815260048101849052602401610287565b80848481518110610f7357610f73613646565b60209081029190910101525050600101610e97565b5092915050565b610f97611be3565b610fa05f611c63565b565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610fcc81611733565b610c8d85858585611c96565b3373ffffffffffffffffffffffffffffffffffffffff86161461100057611000338685611cde565b610c8d8585858585611da5565b3373ffffffffffffffffffffffffffffffffffffffff8416148061104657503373ffffffffffffffffffffffffffffffffffffffff8516145b3384869091926110ab576040517f98ce294500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401610287565b5050505f6110b98585610dad565b9050828110156110f5576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8281036111068587836001876117bb565b5f85828560405160200161111c93929190613609565b6040516020818303038152906040529050610b4e87826119df565b61113f611be3565b60095460ff1661117b576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040515f907f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4908290a2565b6111d7611be3565b341561120f576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d9e8282611e7c565b5f8281526007602052604081206112309083611fdb565b9392505050565b5f6112308383611fe6565b61124a611be3565b3415611282576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d9e8282611ffd565b5f81815260076020526040902060609061096790611a0a565b6112b33384846001856117bb565b5f3383836040516020016112c993929190613609565b6040516020818303038152906040529050610c8f84826119df565b5f818152600760205260408120610967906120c1565b5f8281526006602052604090205461131181611733565b8215801561133857505f5473ffffffffffffffffffffffffffffffffffffffff8381169116145b1582849091611391576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401610287565b505061099a8383611aad565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260046020526040902060609061096790611a0a565b6060815167ffffffffffffffff8111156113e9576113e9612ce3565b60405190808252806020026020018201604052801561141c57816020015b60608152602001906001900390816114075790505b5090505f5b82518110156114715761144c83828151811061143f5761143f613646565b6020026020010151611b44565b82828151811061145e5761145e613646565b6020908102919091010152600101611421565b50919050565b61147f611be3565b73ffffffffffffffffffffffffffffffffffffffff8116611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610287565b61152b81611c63565b50565b5f808061157d7fcee78b4094da86011096000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000086166120ca565b90505f61158982611b44565b905080516014148061159a57508051155b81906115d3576040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016102879190613242565b506115dd81613721565b60601c95600195509350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061167e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000145b8061096757507fffffffff0000000000000000000000000000000000000000000000000000000082167f90832245000000000000000000000000000000000000000000000000000000001492915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fc52d600800000000000000000000000000000000000000000000000000000000148061172457506117248261214d565b806109675750610967826121a2565b61152b81336121fd565b81611774576040517fd0dc904b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b73ffffffffffffffffffffffffffffffffffffffff8416611808576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361186d576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086165f90815260056020908152604080832093881683529290522083905582156119415773ffffffffffffffffffffffffffffffffffffffff85165f9081526004602052604090206118d5908561225f565b50828573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d846040516119349190613242565b60405180910390a4610c8d565b73ffffffffffffffffffffffffffffffffffffffff85165f90815260046020526040902061196f9085612280565b508115158573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167846040516119d09190613242565b60405180910390a45050505050565b610d9e827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc836122a1565b60605f6112308361239a565b5f828152600760205260408120611a2d908361225f565b9050801561099a5773ffffffffffffffffffffffffffffffffffffffff82165f908152600860205260409020611a6390846123f2565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a4505050565b5f828152600760205260408120611ac49083612280565b9050801561099a5773ffffffffffffffffffffffffffffffffffffffff82165f908152600860205260409020611afa90846123fd565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b5f818152600160205260409020805460609190611b609061378d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8c9061378d565b8015611bd75780601f10611bae57610100808354040283529160200191611bd7565b820191905f5260205f20905b815481529060010190602001808311611bba57829003601f168201915b50505050509050919050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610fa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610287565b611c8d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a65f61173d565b61152b81612408565b60095460ff16611cd2576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8f848484846124b9565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260056020908152604080832093871683529290522054801580611d1c57508082115b15611d81576040517ff3a6b69100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152602482018390528516604482015260648101839052608401610287565b610c8f8385611d9085856137d8565b5f60405180602001604052805f8152506117bb565b73ffffffffffffffffffffffffffffffffffffffff851615801590611ddf575073ffffffffffffffffffffffffffffffffffffffff841615155b611e15576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e228585858585610c8d565b611e2f8585858585612563565b611e3c8585858585610c8d565b5f3386868685604051602001611e569594939291906137eb565b6040516020818303038152906040529050611e71868261271c565b610a4a858483612747565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611ed5576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201611f2e576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201611f87576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152600160205260409020611f9e828261389b565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051611fcf9190613242565b60405180910390a25050565b5f61123083836128a0565b5f82815260076020526040812061123090836128c6565b8051825114612038576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81515f03612072576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b825181101561099a576120b983828151811061209257612092613646565b60200260200101518383815181106120ac576120ac613646565b6020026020010151611e7c565b600101612074565b5f610967825490565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201525f602a82018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416602c83015291829101604051602081830303815290604052905080612145906139b2565b949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fa918fa6b0000000000000000000000000000000000000000000000000000000014806109675750610967826128f4565b5f806121cd7f01ffc9a70000000000000000000000000000000000000000000000000000000061152e565b50905073ffffffffffffffffffffffffffffffffffffffff81166121f357505f92915050565b611230818461298a565b6122078282611fe6565b81839091610c8f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401610287565b5f6112308373ffffffffffffffffffffffffffffffffffffffff8416612a56565b5f6112308373ffffffffffffffffffffffffffffffffffffffff8416612aa2565b6122e173ffffffffffffffffffffffffffffffffffffffff84167f6bb56a140000000000000000000000000000000000000000000000000000000061298a565b1561099a576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a149061233a90859085906004016139f4565b5f604051808303815f875af1158015612355573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c8f9190810190613a0c565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611bd757602002820191905f5260205f20905b8154815260200190600101908083116123d35750505050509050919050565b5f6112308383612a56565b5f6112308383612aa2565b5f5473ffffffffffffffffffffffffffffffffffffffff1661242982612b85565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260086020526040812061245690611a0a565b90505f5b8151811015610c8f575f82828151811061247657612476613646565b6020026020010151905061248a8185611aad565b73ffffffffffffffffffffffffffffffffffffffff8516156124b0576124b08186611a16565b5060010161245a565b73ffffffffffffffffffffffffffffffffffffffff8416612506576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125135f85858585610c8d565b6125205f85858585612563565b61252d5f85858585610c8d565b5f335f8686856040516020016125479594939291906137eb565b6040516020818303038152906040529050610c8d858483612747565b73ffffffffffffffffffffffffffffffffffffffff851661259a578260025f82825461258f91906135f6565b909155506126509050565b73ffffffffffffffffffffffffffffffffffffffff85165f9081526003602052604090205480868580831015612622576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff90911660248301526044820152606401610287565b50505073ffffffffffffffffffffffffffffffffffffffff86165f9081526003602052604090209084900390555b73ffffffffffffffffffffffffffffffffffffffff8416612679576002805484900390556126a4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526003602052604090208054840190555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a68686866040516119d093929190613a81565b610d9e827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea836122a1565b612771837f6bb56a140000000000000000000000000000000000000000000000000000000061298a565b156127ea576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a149061233a907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c9085906004016139f4565b8161099a5773ffffffffffffffffffffffffffffffffffffffff83163b15612856576040517fa608fbb600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610287565b6040517f26c247f400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610287565b5f825f0182815481106128b5576128b5613646565b905f5260205f200154905092915050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001830160205260408120541515611230565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f629aa69400000000000000000000000000000000000000000000000000000000148061096757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610967565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a70000000000000000000000000000000000000000000000000000000017815282515f9392849283928392918391908a617530fa92503d91505f519050828015612a40575060208210155b8015612a4b57505f81115b979650505050505050565b5f818152600183016020526040812054612a9b57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610967565b505f610967565b5f8181526001830160205260408120548015612b7c575f612ac46001836137d8565b85549091505f90612ad7906001906137d8565b9050818114612b36575f865f018281548110612af557612af5613646565b905f5260205f200154905080875f018481548110612b1557612b15613646565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612b4757612b47613aa1565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610967565b5f915050610967565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f60208284031215612c55575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611230575f5ffd5b5f5f60408385031215612c95575f5ffd5b50508035926020909101359150565b5f60208284031215612cb4575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612cde575f5ffd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612d5757612d57612ce3565b604052919050565b5f67ffffffffffffffff821115612d7857612d78612ce3565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112612db3575f5ffd5b8135612dc6612dc182612d5f565b612d10565b818152846020838601011115612dda575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215612e08575f5ffd5b612e1184612cbb565b925060208401359150604084013567ffffffffffffffff811115612e33575f5ffd5b612e3f86828701612da4565b9150509250925092565b5f67ffffffffffffffff821115612e6257612e62612ce3565b5060051b60200190565b5f82601f830112612e7b575f5ffd5b8135612e89612dc182612e49565b8082825260208201915060208360051b860101925085831115612eaa575f5ffd5b602085015b83811015612ece57612ec081612cbb565b835260209283019201612eaf565b5095945050505050565b5f82601f830112612ee7575f5ffd5b8135612ef5612dc182612e49565b8082825260208201915060208360051b860101925085831115612f16575f5ffd5b602085015b83811015612ece578035835260209283019201612f1b565b80358015158114612cde575f5ffd5b5f82601f830112612f51575f5ffd5b8135612f5f612dc182612e49565b8082825260208201915060208360051b860101925085831115612f80575f5ffd5b602085015b83811015612ece57612f9681612f33565b835260209283019201612f85565b5f82601f830112612fb3575f5ffd5b8135612fc1612dc182612e49565b8082825260208201915060208360051b860101925085831115612fe2575f5ffd5b602085015b83811015612ece57803567ffffffffffffffff811115613005575f5ffd5b613014886020838a0101612da4565b84525060209283019201612fe7565b5f5f5f5f5f60a08688031215613037575f5ffd5b853567ffffffffffffffff81111561304d575f5ffd5b61305988828901612e6c565b955050602086013567ffffffffffffffff811115613075575f5ffd5b61308188828901612e6c565b945050604086013567ffffffffffffffff81111561309d575f5ffd5b6130a988828901612ed8565b935050606086013567ffffffffffffffff8111156130c5575f5ffd5b6130d188828901612f42565b925050608086013567ffffffffffffffff8111156130ed575f5ffd5b6130f988828901612fa4565b9150509295509295909350565b5f60208284031215613116575f5ffd5b61123082612cbb565b602080825282518282018190525f918401906040840190835b81811015613156578351835260209384019390920191600101613138565b509095945050505050565b5f5f60408385031215613172575f5ffd5b8235915061318260208401612cbb565b90509250929050565b5f5f5f5f6080858703121561319e575f5ffd5b6131a785612cbb565b93506131b560208601612cbb565b92506131c360408601612f33565b9150606085013567ffffffffffffffff8111156131de575f5ffd5b6131ea87828801612da4565b91505092959194509250565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61123060208301846131f6565b5f5f60408385031215613265575f5ffd5b61326e83612cbb565b915061318260208401612cbb565b5f5f6020838503121561328d575f5ffd5b823567ffffffffffffffff8111156132a3575f5ffd5b8301601f810185136132b3575f5ffd5b803567ffffffffffffffff8111156132c9575f5ffd5b8560208260051b84010111156132dd575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613362577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261334d8583516131f6565b94506020938401939190910190600101613313565b50929695505050505050565b5f5f5f5f60808587031215613381575f5ffd5b61338a85612cbb565b9350602085013592506131c360408601612f33565b5f5f5f5f5f60a086880312156133b3575f5ffd5b6133bc86612cbb565b94506133ca60208701612cbb565b9350604086013592506133df60608701612f33565b9150608086013567ffffffffffffffff8111156133fa575f5ffd5b6130f988828901612da4565b5f5f5f5f60808587031215613419575f5ffd5b61342285612cbb565b935061343060208601612cbb565b925060408501359150606085013567ffffffffffffffff8111156131de575f5ffd5b5f5f60408385031215613463575f5ffd5b82359150602083013567ffffffffffffffff811115613480575f5ffd5b61348c85828601612da4565b9150509250929050565b5f5f604083850312156134a7575f5ffd5b823567ffffffffffffffff8111156134bd575f5ffd5b6134c985828601612ed8565b925050602083013567ffffffffffffffff8111156134e5575f5ffd5b61348c85828601612fa4565b602080825282518282018190525f918401906040840190835b8181101561315657835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161350a565b5f6020828403121561354e575f5ffd5b813567ffffffffffffffff811115613564575f5ffd5b61214584828501612ed8565b8385823760609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016919092019081526014810191909152603401919050565b5f82518060208501845e5f920191825250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610967576109676135c9565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f61363d60608301846131f6565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8416815260ff83166020820152606060408201525f61363d60608301846131f6565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136dd575f5ffd5b83018035915067ffffffffffffffff8211156136f7575f5ffd5b60200191503681900382131561370b575f5ffd5b9250929050565b818382375f9101908152919050565b805160208201517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811691906014821015613786577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808360140360031b1b82161692505b5050919050565b600181811c908216806137a157607f821691505b602082108103611471577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b81810381811115610967576109676135c9565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f612a4b60a08301846131f6565b601f82111561099a57805f5260205f20601f840160051c8101602085101561387c5750805b601f840160051c820191505b81811015610c8d575f8155600101613888565b815167ffffffffffffffff8111156138b5576138b5612ce3565b6138c9816138c3845461378d565b84613857565b6020601f82116001811461391a575f83156138e45750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610c8d565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156139675787850151825560209485019460019092019101613947565b50848210156139a357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b80516020808301519190811015611471577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b828152604060208201525f61214560408301846131f6565b5f60208284031215613a1c575f5ffd5b815167ffffffffffffffff811115613a32575f5ffd5b8201601f81018413613a42575f5ffd5b8051613a50612dc182612d5f565b818152856020838501011115613a64575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b8381528215156020820152606060408201525f61363d60608301846131f6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220a91a8685d93efe949ed95de50c4b5e8618ef308505424949cf33d13e7f351d6a64736f6c634300081c00339f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
  "deployedBytecode": "0x608060405260043610610237575f3560e01c80637580d92011610137578063a217fddf116100af578063d53913931161007e578063d72fc29a11610063578063d72fc29a1461077b578063dedff9c61461079a578063f2fde38b146107b9576102c2565b8063d539139314610729578063d547741f1461075c576102c2565b8063a217fddf146106ac578063a3246ad3146106bf578063b49506fd146106eb578063ca15c8731461070a576102c2565b80637f23690c116101065780639010d07c116100eb5780639010d07c1461065b57806391d148541461067a5780639790242114610699576102c2565b80637f23690c146105fe5780638da5cb5b14610611576102c2565b80637580d9201461058d578063760d9bba146105ac57806378381670146105cb5780637e5cd5c1146105ea576102c2565b806330d0dc37116101ca57806354f6127f116101995780636963d4381161017e5780636963d4381461050c57806370a0823114610538578063715018a614610579576102c2565b806354f6127f146104c157806365aeaa95146104ed576102c2565b806330d0dc3714610444578063313ce5671461046357806336568abe1461048957806346b45af7146104a8576102c2565b80632bc1da82116102065780632bc1da82146103bb5780632d7667c9146103da5780632de94807146103f95780632f2ff15d14610425576102c2565b806301ffc9a71461031d57806318160ddd146103515780631e4e00911461036f578063248a9ca314610390576102c2565b366102c257345f03610290576040517fe5099ee30000000000000000000000000000000000000000000000000000000081526004016102879060208082526004908201525f604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f36606082826004811015610305576040517fe5099ee3000000000000000000000000000000000000000000000000000000008152600401610287929190612bf9565b505061031183836107d8565b80519350602001915050f35b348015610328575f5ffd5b5061033c610337366004612c45565b61096d565b60405190151581526020015b60405180910390f35b34801561035c575f5ffd5b506002545b604051908152602001610348565b34801561037a575f5ffd5b5061038e610389366004612c84565b610986565b005b34801561039b575f5ffd5b506103616103aa366004612ca4565b5f9081526006602052604090205490565b3480156103c6575f5ffd5b5061038e6103d5366004612df6565b61099f565b3480156103e5575f5ffd5b5061038e6103f4366004613023565b610a52565b348015610404575f5ffd5b50610418610413366004613106565b610b57565b604051610348919061311f565b348015610430575f5ffd5b5061038e61043f366004613161565b610b87565b34801561044f575f5ffd5b5061038e61045e36600461318b565b610ba8565b34801561046e575f5ffd5b50610477610c95565b60405160ff9091168152602001610348565b348015610494575f5ffd5b5061038e6104a3366004613161565b610cc6565b3480156104b3575f5ffd5b5060095461033c9060ff1681565b3480156104cc575f5ffd5b506104e06104db366004612ca4565b610da2565b6040516103489190613242565b3480156104f8575f5ffd5b50610361610507366004613254565b610dad565b348015610517575f5ffd5b5061052b61052636600461327c565b610e44565b60405161034891906132ed565b348015610543575f5ffd5b50610361610552366004613106565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b348015610584575f5ffd5b5061038e610f8f565b348015610598575f5ffd5b5061038e6105a736600461336e565b610fa2565b3480156105b7575f5ffd5b5061038e6105c636600461339f565b610fd8565b3480156105d6575f5ffd5b5061038e6105e5366004613406565b61100d565b3480156105f5575f5ffd5b5061038e611137565b61038e61060c366004613452565b6111cf565b34801561061c575f5ffd5b505f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610348565b348015610666575f5ffd5b50610636610675366004612c84565b611219565b348015610685575f5ffd5b5061033c610694366004613161565b611237565b61038e6106a7366004613496565b611242565b3480156106b7575f5ffd5b506103615f81565b3480156106ca575f5ffd5b506106de6106d9366004612ca4565b61128c565b60405161034891906134f1565b3480156106f6575f5ffd5b5061038e610705366004612df6565b6112a5565b348015610715575f5ffd5b50610361610724366004612ca4565b6112e4565b348015610734575f5ffd5b506103617f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b348015610767575f5ffd5b5061038e610776366004613161565b6112fa565b348015610786575f5ffd5b506106de610795366004613106565b61139d565b3480156107a5575f5ffd5b5061052b6107b436600461353e565b6113cd565b3480156107c4575f5ffd5b5061038e6107d3366004613106565b611477565b60605f6108075f357fffffffff000000000000000000000000000000000000000000000000000000001661152e565b5090507fffffffff000000000000000000000000000000000000000000000000000000005f351673ffffffffffffffffffffffffffffffffffffffff82166108a0576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000009091166004820152602401610287565b505f5f8273ffffffffffffffffffffffffffffffffffffffff1634878733346040516020016108d29493929190613570565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261090a916135b3565b5f6040518083038185875af1925050503d805f8114610944576040519150601f19603f3d011682016040523d82523d5f602084013e610949565b606091505b5091509150811561095e579250610967915050565b80518060208301fd5b92915050565b5f610977826115ec565b806109675750610967826116cf565b5f61099081611733565b61099a838361173d565b505050565b5f6109aa8433610dad565b905083816109fd576040517fcba6e97700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610287565b505f610a0984836135f6565b9050610a193386836001876117bb565b5f338285604051602001610a2f93929190613609565b6040516020818303038152906040529050610a4a86826119df565b505050505050565b8451845181148015610a645750835181145b8015610a705750825181145b8015610a7c5750815181145b610ab2576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610b4e57610b46878281518110610ad157610ad1613646565b6020026020010151878381518110610aeb57610aeb613646565b6020026020010151878481518110610b0557610b05613646565b6020026020010151878581518110610b1f57610b1f613646565b6020026020010151878681518110610b3957610b39613646565b6020026020010151610fd8565b600101610ab4565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260086020526040902060609061096790611a0a565b5f82815260066020526040902054610b9e81611733565b61099a8383611a16565b3373ffffffffffffffffffffffffffffffffffffffff84161480610be157503373ffffffffffffffffffffffffffffffffffffffff8516145b338486909192610c46576040517f1a525b3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401610287565b505050610c5683855f85856117bb565b8115610c8f575f835f83604051602001610c7293929190613673565b6040516020818303038152906040529050610c8d85826119df565b505b50505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000610cc15750601290565b505f90565b73ffffffffffffffffffffffffffffffffffffffff81163314610d15576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81158015610d3957505f5473ffffffffffffffffffffffffffffffffffffffff1633145b1533839091610d92576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401610287565b5050610d9e8233611aad565b5050565b606061096782611b44565b5f8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e0c575073ffffffffffffffffffffffffffffffffffffffff81165f90815260036020526040902054610967565b5073ffffffffffffffffffffffffffffffffffffffff8082165f90815260056020908152604080832093861683529290522054610967565b60608167ffffffffffffffff811115610e5f57610e5f612ce3565b604051908082528060200260200182016040528015610e9257816020015b6060815260200190600190039081610e7d5790505b5090505f5b82811015610f88575f8030868685818110610eb457610eb4613646565b9050602002810190610ec691906136aa565b604051610ed4929190613712565b5f60405180830381855af49150503d805f8114610f0c576040519150601f19603f3d011682016040523d82523d5f602084013e610f11565b606091505b509150915081610f6057805115610f2b5780518082602001fd5b6040517fb774c28400000000000000000000000000000000000000000000000000000000815260048101849052602401610287565b80848481518110610f7357610f73613646565b60209081029190910101525050600101610e97565b5092915050565b610f97611be3565b610fa05f611c63565b565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610fcc81611733565b610c8d85858585611c96565b3373ffffffffffffffffffffffffffffffffffffffff86161461100057611000338685611cde565b610c8d8585858585611da5565b3373ffffffffffffffffffffffffffffffffffffffff8416148061104657503373ffffffffffffffffffffffffffffffffffffffff8516145b3384869091926110ab576040517f98ce294500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301529091166044820152606401610287565b5050505f6110b98585610dad565b9050828110156110f5576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8281036111068587836001876117bb565b5f85828560405160200161111c93929190613609565b6040516020818303038152906040529050610b4e87826119df565b61113f611be3565b60095460ff1661117b576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040515f907f41f386d449eec03c1c3b75bbba9c18df70aa19779ff47f68eab4b6a66fb399d4908290a2565b6111d7611be3565b341561120f576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d9e8282611e7c565b5f8281526007602052604081206112309083611fdb565b9392505050565b5f6112308383611fe6565b61124a611be3565b3415611282576040517ff36ba73700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d9e8282611ffd565b5f81815260076020526040902060609061096790611a0a565b6112b33384846001856117bb565b5f3383836040516020016112c993929190613609565b6040516020818303038152906040529050610c8f84826119df565b5f818152600760205260408120610967906120c1565b5f8281526006602052604090205461131181611733565b8215801561133857505f5473ffffffffffffffffffffffffffffffffffffffff8381169116145b1582849091611391576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401610287565b505061099a8383611aad565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260046020526040902060609061096790611a0a565b6060815167ffffffffffffffff8111156113e9576113e9612ce3565b60405190808252806020026020018201604052801561141c57816020015b60608152602001906001900390816114075790505b5090505f5b82518110156114715761144c83828151811061143f5761143f613646565b6020026020010151611b44565b82828151811061145e5761145e613646565b6020908102919091010152600101611421565b50919050565b61147f611be3565b73ffffffffffffffffffffffffffffffffffffffff8116611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610287565b61152b81611c63565b50565b5f808061157d7fcee78b4094da86011096000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000086166120ca565b90505f61158982611b44565b905080516014148061159a57508051155b81906115d3576040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016102879190613242565b506115dd81613721565b60601c95600195509350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061167e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000145b8061096757507fffffffff0000000000000000000000000000000000000000000000000000000082167f90832245000000000000000000000000000000000000000000000000000000001492915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fc52d600800000000000000000000000000000000000000000000000000000000148061172457506117248261214d565b806109675750610967826121a2565b61152b81336121fd565b81611774576040517fd0dc904b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260066020526040808220805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b73ffffffffffffffffffffffffffffffffffffffff8416611808576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361186d576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086165f90815260056020908152604080832093881683529290522083905582156119415773ffffffffffffffffffffffffffffffffffffffff85165f9081526004602052604090206118d5908561225f565b50828573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d846040516119349190613242565b60405180910390a4610c8d565b73ffffffffffffffffffffffffffffffffffffffff85165f90815260046020526040902061196f9085612280565b508115158573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167846040516119d09190613242565b60405180910390a45050505050565b610d9e827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc836122a1565b60605f6112308361239a565b5f828152600760205260408120611a2d908361225f565b9050801561099a5773ffffffffffffffffffffffffffffffffffffffff82165f908152600860205260409020611a6390846123f2565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d905f90a4505050565b5f828152600760205260408120611ac49083612280565b9050801561099a5773ffffffffffffffffffffffffffffffffffffffff82165f908152600860205260409020611afa90846123fd565b50604051339073ffffffffffffffffffffffffffffffffffffffff84169085907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b905f90a4505050565b5f818152600160205260409020805460609190611b609061378d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8c9061378d565b8015611bd75780601f10611bae57610100808354040283529160200191611bd7565b820191905f5260205f20905b815481529060010190602001808311611bba57829003601f168201915b50505050509050919050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610fa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610287565b611c8d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a65f61173d565b61152b81612408565b60095460ff16611cd2576040517fe633442100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8f848484846124b9565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260056020908152604080832093871683529290522054801580611d1c57508082115b15611d81576040517ff3a6b69100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152602482018390528516604482015260648101839052608401610287565b610c8f8385611d9085856137d8565b5f60405180602001604052805f8152506117bb565b73ffffffffffffffffffffffffffffffffffffffff851615801590611ddf575073ffffffffffffffffffffffffffffffffffffffff841615155b611e15576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e228585858585610c8d565b611e2f8585858585612563565b611e3c8585858585610c8d565b5f3386868685604051602001611e569594939291906137eb565b6040516020818303038152906040529050611e71868261271c565b610a4a858483612747565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611ed5576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa8201611f2e576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201611f87576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152600160205260409020611f9e828261389b565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051611fcf9190613242565b60405180910390a25050565b5f61123083836128a0565b5f82815260076020526040812061123090836128c6565b8051825114612038576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81515f03612072576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b825181101561099a576120b983828151811061209257612092613646565b60200260200101518383815181106120ac576120ac613646565b6020026020010151611e7c565b600101612074565b5f610967825490565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201525f602a82018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416602c83015291829101604051602081830303815290604052905080612145906139b2565b949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fa918fa6b0000000000000000000000000000000000000000000000000000000014806109675750610967826128f4565b5f806121cd7f01ffc9a70000000000000000000000000000000000000000000000000000000061152e565b50905073ffffffffffffffffffffffffffffffffffffffff81166121f357505f92915050565b611230818461298a565b6122078282611fe6565b81839091610c8f576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401610287565b5f6112308373ffffffffffffffffffffffffffffffffffffffff8416612a56565b5f6112308373ffffffffffffffffffffffffffffffffffffffff8416612aa2565b6122e173ffffffffffffffffffffffffffffffffffffffff84167f6bb56a140000000000000000000000000000000000000000000000000000000061298a565b1561099a576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a149061233a90859085906004016139f4565b5f604051808303815f875af1158015612355573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c8f9190810190613a0c565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611bd757602002820191905f5260205f20905b8154815260200190600101908083116123d35750505050509050919050565b5f6112308383612a56565b5f6112308383612aa2565b5f5473ffffffffffffffffffffffffffffffffffffffff1661242982612b85565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260086020526040812061245690611a0a565b90505f5b8151811015610c8f575f82828151811061247657612476613646565b6020026020010151905061248a8185611aad565b73ffffffffffffffffffffffffffffffffffffffff8516156124b0576124b08186611a16565b5060010161245a565b73ffffffffffffffffffffffffffffffffffffffff8416612506576040517fd2d5ec3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125135f85858585610c8d565b6125205f85858585612563565b61252d5f85858585610c8d565b5f335f8686856040516020016125479594939291906137eb565b6040516020818303038152906040529050610c8d858483612747565b73ffffffffffffffffffffffffffffffffffffffff851661259a578260025f82825461258f91906135f6565b909155506126509050565b73ffffffffffffffffffffffffffffffffffffffff85165f9081526003602052604090205480868580831015612622576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481019390935273ffffffffffffffffffffffffffffffffffffffff90911660248301526044820152606401610287565b50505073ffffffffffffffffffffffffffffffffffffffff86165f9081526003602052604090209084900390555b73ffffffffffffffffffffffffffffffffffffffff8416612679576002805484900390556126a4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526003602052604090208054840190555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a68686866040516119d093929190613a81565b610d9e827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea836122a1565b612771837f6bb56a140000000000000000000000000000000000000000000000000000000061298a565b156127ea576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a149061233a907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c9085906004016139f4565b8161099a5773ffffffffffffffffffffffffffffffffffffffff83163b15612856576040517fa608fbb600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610287565b6040517f26c247f400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610287565b5f825f0182815481106128b5576128b5613646565b905f5260205f200154905092915050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001830160205260408120541515611230565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f629aa69400000000000000000000000000000000000000000000000000000000148061096757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610967565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a70000000000000000000000000000000000000000000000000000000017815282515f9392849283928392918391908a617530fa92503d91505f519050828015612a40575060208210155b8015612a4b57505f81115b979650505050505050565b5f818152600183016020526040812054612a9b57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610967565b505f610967565b5f8181526001830160205260408120548015612b7c575f612ac46001836137d8565b85549091505f90612ad7906001906137d8565b9050818114612b36575f865f018281548110612af557612af5613646565b905f5260205f200154905080875f018481548110612b1557612b15613646565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612b4757612b47613aa1565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610967565b5f915050610967565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208152816020820152818360408301375f818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b5f60208284031215612c55575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611230575f5ffd5b5f5f60408385031215612c95575f5ffd5b50508035926020909101359150565b5f60208284031215612cb4575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612cde575f5ffd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612d5757612d57612ce3565b604052919050565b5f67ffffffffffffffff821115612d7857612d78612ce3565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112612db3575f5ffd5b8135612dc6612dc182612d5f565b612d10565b818152846020838601011115612dda575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215612e08575f5ffd5b612e1184612cbb565b925060208401359150604084013567ffffffffffffffff811115612e33575f5ffd5b612e3f86828701612da4565b9150509250925092565b5f67ffffffffffffffff821115612e6257612e62612ce3565b5060051b60200190565b5f82601f830112612e7b575f5ffd5b8135612e89612dc182612e49565b8082825260208201915060208360051b860101925085831115612eaa575f5ffd5b602085015b83811015612ece57612ec081612cbb565b835260209283019201612eaf565b5095945050505050565b5f82601f830112612ee7575f5ffd5b8135612ef5612dc182612e49565b8082825260208201915060208360051b860101925085831115612f16575f5ffd5b602085015b83811015612ece578035835260209283019201612f1b565b80358015158114612cde575f5ffd5b5f82601f830112612f51575f5ffd5b8135612f5f612dc182612e49565b8082825260208201915060208360051b860101925085831115612f80575f5ffd5b602085015b83811015612ece57612f9681612f33565b835260209283019201612f85565b5f82601f830112612fb3575f5ffd5b8135612fc1612dc182612e49565b8082825260208201915060208360051b860101925085831115612fe2575f5ffd5b602085015b83811015612ece57803567ffffffffffffffff811115613005575f5ffd5b613014886020838a0101612da4565b84525060209283019201612fe7565b5f5f5f5f5f60a08688031215613037575f5ffd5b853567ffffffffffffffff81111561304d575f5ffd5b61305988828901612e6c565b955050602086013567ffffffffffffffff811115613075575f5ffd5b61308188828901612e6c565b945050604086013567ffffffffffffffff81111561309d575f5ffd5b6130a988828901612ed8565b935050606086013567ffffffffffffffff8111156130c5575f5ffd5b6130d188828901612f42565b925050608086013567ffffffffffffffff8111156130ed575f5ffd5b6130f988828901612fa4565b9150509295509295909350565b5f60208284031215613116575f5ffd5b61123082612cbb565b602080825282518282018190525f918401906040840190835b81811015613156578351835260209384019390920191600101613138565b509095945050505050565b5f5f60408385031215613172575f5ffd5b8235915061318260208401612cbb565b90509250929050565b5f5f5f5f6080858703121561319e575f5ffd5b6131a785612cbb565b93506131b560208601612cbb565b92506131c360408601612f33565b9150606085013567ffffffffffffffff8111156131de575f5ffd5b6131ea87828801612da4565b91505092959194509250565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61123060208301846131f6565b5f5f60408385031215613265575f5ffd5b61326e83612cbb565b915061318260208401612cbb565b5f5f6020838503121561328d575f5ffd5b823567ffffffffffffffff8111156132a3575f5ffd5b8301601f810185136132b3575f5ffd5b803567ffffffffffffffff8111156132c9575f5ffd5b8560208260051b84010111156132dd575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613362577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261334d8583516131f6565b94506020938401939190910190600101613313565b50929695505050505050565b5f5f5f5f60808587031215613381575f5ffd5b61338a85612cbb565b9350602085013592506131c360408601612f33565b5f5f5f5f5f60a086880312156133b3575f5ffd5b6133bc86612cbb565b94506133ca60208701612cbb565b9350604086013592506133df60608701612f33565b9150608086013567ffffffffffffffff8111156133fa575f5ffd5b6130f988828901612da4565b5f5f5f5f60808587031215613419575f5ffd5b61342285612cbb565b935061343060208601612cbb565b925060408501359150606085013567ffffffffffffffff8111156131de575f5ffd5b5f5f60408385031215613463575f5ffd5b82359150602083013567ffffffffffffffff811115613480575f5ffd5b61348c85828601612da4565b9150509250929050565b5f5f604083850312156134a7575f5ffd5b823567ffffffffffffffff8111156134bd575f5ffd5b6134c985828601612ed8565b925050602083013567ffffffffffffffff8111156134e5575f5ffd5b61348c85828601612fa4565b602080825282518282018190525f918401906040840190835b8181101561315657835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161350a565b5f6020828403121561354e575f5ffd5b813567ffffffffffffffff811115613564575f5ffd5b61214584828501612ed8565b8385823760609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016919092019081526014810191909152603401919050565b5f82518060208501845e5f920191825250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610967576109676135c9565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f61363d60608301846131f6565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8416815260ff83166020820152606060408201525f61363d60608301846131f6565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136dd575f5ffd5b83018035915067ffffffffffffffff8211156136f7575f5ffd5b60200191503681900382131561370b575f5ffd5b9250929050565b818382375f9101908152919050565b805160208201517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811691906014821015613786577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808360140360031b1b82161692505b5050919050565b600181811c908216806137a157607f821691505b602082108103611471577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b81810381811115610967576109676135c9565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015273ffffffffffffffffffffffffffffffffffffffff8416604082015282606082015260a060808201525f612a4b60a08301846131f6565b601f82111561099a57805f5260205f20601f840160051c8101602085101561387c5750805b601f840160051c820191505b81811015610c8d575f8155600101613888565b815167ffffffffffffffff8111156138b5576138b5612ce3565b6138c9816138c3845461378d565b84613857565b6020601f82116001811461391a575f83156138e45750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610c8d565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156139675787850151825560209485019460019092019101613947565b50848210156139a357868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b80516020808301519190811015611471577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b828152604060208201525f61214560408301846131f6565b5f60208284031215613a1c575f5ffd5b815167ffffffffffffffff811115613a32575f5ffd5b8201601f81018413613a42575f5ffd5b8051613a50612dc182612d5f565b818152856020838501011115613a64575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b8381528215156020820152606060408201525f61363d60608301846131f6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220a91a8685d93efe949ed95de50c4b5e8618ef308505424949cf33d13e7f351d6a64736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {},
  "immutableReferences": {
    "14853": [
      {
        "length": 32,
        "start": 3224
      }
    ]
  },
  "inputSourceName": "project/contracts/presets/LSP7Mintable.sol",
  "buildInfoId": "solc-0_8_28-02f211569dac97f8d48f774b05c17d2fd78020fb"
}