{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721CWithReassignableMinterRoyalties",
  "sourceName": "contracts/examples/erc721c/ERC721CWithReassignableMinterRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "royaltyFeeNumerator_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "royaltyRightsNFTReference_",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinterRoyaltiesReassignableRightsNFT__MinterCannotBeZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinterRoyaltiesReassignableRightsNFT__RoyaltyFeeWillExceedSalePrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldValidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValidator",
          "type": "address"
        }
      ],
      "name": "TransferValidatorUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_OPERATOR_WHITELIST_ID",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
      "outputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_VALIDATOR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FEE_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPermittedContractReceivers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSecurityPolicy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TransferSecurityLevels",
              "name": "transferSecurityLevel",
              "type": "uint8"
            },
            {
              "internalType": "uint120",
              "name": "operatorWhitelistId",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "permittedContractReceiversId",
              "type": "uint120"
            }
          ],
          "internalType": "struct CollectionSecurityPolicy",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTransferValidator",
      "outputs": [
        {
          "internalType": "contract ICreatorTokenTransferValidator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistedOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "isContractReceiverPermitted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isOperatorWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "isTransferAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "royaltyFeeNumerator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "royaltyRightsNFT",
      "outputs": [
        {
          "internalType": "contract ICloneableRoyaltyRightsERC721",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomValidatorAndSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setToDefaultSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "transferValidator_",
          "type": "address"
        }
      ],
      "name": "setTransferValidator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b50604051620033e6380380620033e68339810160408190526200003491620003f8565b83838383604051806020016040528060008152506040518060200160405280600081525081600090805190602001906200007092919062000285565b5080516200008690600190602084019062000285565b5050506200009b82826200015d60201b60201c565b50620000a99050336200018d565b612710821115620000cd5760405163574f72a160e11b815260040160405180910390fd5b81608081815250506000620000ed82620001df60201b620016ec1760201c565b9050806001600160a01b031663321f16136040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200012b57600080fd5b505af115801562000140573d6000803e3d6000fd5b505050506001600160a01b031660a05250620004ca945050505050565b81516200017290600690602085019062000285565b5080516200018890600790602084019062000285565b505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116620002805760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c656400000000000000000000604482015260640160405180910390fd5b919050565b82805462000293906200048d565b90600052602060002090601f016020900481019282620002b7576000855562000302565b82601f10620002d257805160ff191683800117855562000302565b8280016001018555821562000302579182015b8281111562000302578251825591602001919060010190620002e5565b506200031092915062000314565b5090565b5b8082111562000310576000815560010162000315565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200035357600080fd5b81516001600160401b03808211156200037057620003706200032b565b604051601f8301601f19908116603f011681019082821181831017156200039b576200039b6200032b565b81604052838152602092508683858801011115620003b857600080fd5b600091505b83821015620003dc5785820183015181830184015290820190620003bd565b83821115620003ee5760008385830101525b9695505050505050565b600080600080608085870312156200040f57600080fd5b845160208601519094506001600160a01b03811681146200042f57600080fd5b60408601519093506001600160401b03808211156200044d57600080fd5b6200045b8883890162000341565b935060608701519150808211156200047257600080fd5b50620004818782880162000341565b91505092959194509250565b600181811c90821680620004a257607f821691505b60208210811415620004c457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612eda6200050c600039600081816103280152818161091701528181611f55015261224e01526000818161049c01526109c00152612eda6000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c80636352211e11610160578063a22cb465116100d8578063d007af5c1161008c578063e985e9c511610071578063e985e9c51461056f578063f2fde38b146105ab578063fd762d92146105be57600080fd5b8063d007af5c1461055e578063d73792a91461056657600080fd5b8063b88d4fde116100bd578063b88d4fde14610523578063be537f4314610536578063c87b56dd1461054b57600080fd5b8063a22cb465146104fd578063a9fc664e1461051057600080fd5b806381ddcc1f1161012f57806395d89b411161011457806395d89b41146104cf5780639d645a44146104d7578063a1448194146104ea57600080fd5b806381ddcc1f146104975780638da5cb5b146104be57600080fd5b80636352211e146104535780636c3b86991461046657806370a082311461046e578063715018a61461048f57600080fd5b806323b872dd116101f357806342842e0e116101c2578063495c8bf9116101a7578063495c8bf9146104035780635d4c1d4614610418578063613471621461044057600080fd5b806342842e0e146103dd57806342966c68146103f057600080fd5b806323b872dd146103725780632a55205a146103855780632e8da829146103b757806340c10f19146103ca57600080fd5b8063095ea7b31161024a578063115767561161022f57806311576756146103235780631b25b0771461034a5780631c33b3281461035d57600080fd5b8063095ea7b3146102fd578063098144d41461031257600080fd5b8063014635461461027c57806301ffc9a7146102b257806306fdde03146102d5578063081812fc146102ea575b600080fd5b61029571721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6102c56102c0366004612743565b6105d1565b60405190151581526020016102a9565b6102dd6105e2565b6040516102a991906127b8565b6102956102f83660046127cb565b610674565b61031061030b3660046127f9565b61069b565b005b6009546001600160a01b0316610295565b6102957f000000000000000000000000000000000000000000000000000000000000000081565b6102c5610358366004612825565b6107f0565b610365600181565b6040516102a99190612892565b6103106103803660046128a0565b610889565b6103986103933660046128e1565b610910565b604080516001600160a01b0390931683526020830191909152016102a9565b6102c56103c5366004612903565b6109fb565b6103106103d83660046127f9565b610b2d565b6103106103eb3660046128a0565b610b3b565b6103106103fe3660046127cb565b610b56565b61040b610b62565b6040516102a99190612920565b610420600181565b6040516effffffffffffffffffffffffffffff90911681526020016102a9565b61031061044e366004612997565b610c99565b6102956104613660046127cb565b610e3e565b610310610ea3565b61048161047c366004612903565b610f9b565b6040519081526020016102a9565b610310611035565b6104817f000000000000000000000000000000000000000000000000000000000000000081565b6008546001600160a01b0316610295565b6102dd611049565b6102c56104e5366004612903565b611058565b6103106104f83660046127f9565b611137565b61031061050b3660046129e5565b611141565b61031061051e366004612903565b61114c565b610310610531366004612a65565b6112a6565b61053e61132e565b6040516102a99190612b29565b6102dd6105593660046127cb565b6113f8565b61040b61146b565b61048161271081565b6102c561057d366004612b6d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103106105b9366004612903565b61153b565b6103106105cc366004612b9b565b6115c8565b60006105dc8261178d565b92915050565b6060600680546105f190612bf7565b80601f016020809104026020016040519081016040528092919081815260200182805461061d90612bf7565b801561066a5780601f1061063f5761010080835404028352916020019161066a565b820191906000526020600020905b81548152906001019060200180831161064d57829003601f168201915b5050505050905090565b600061067f826117cb565b506000908152600460205260409020546001600160a01b031690565b60006106a682610e3e565b9050806001600160a01b0316836001600160a01b031614156107355760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061076f57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6107e15760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161072c565b6107eb838361182f565b505050565b6009546000906001600160a01b03161561087e5760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561085957600080fd5b505afa92505050801561086a575060015b61087657506000610882565b506001610882565b5060015b9392505050565b61089333826118aa565b6109055760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f76656400000000000000000000000000000000000000606482015260840161072c565b6107eb838383611929565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e866040518263ffffffff1660e01b815260040161096391815260200190565b60206040518083038186803b15801561097b57600080fd5b505afa9250505080156109ab575060408051601f3d908101601f191682019092526109a891810190612c32565b60015b6109b4576109b7565b90505b806127106109e57f000000000000000000000000000000000000000000000000000000000000000087612c65565b6109ef9190612c84565b92509250509250929050565b6009546000906001600160a01b031615610b2557600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610a5a57600080fd5b505afa158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a929190612ca6565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610aed57600080fd5b505afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190612d18565b506000919050565b610b378282611b44565b5050565b6107eb838383604051806020016040528060008152506112a6565b610b5f81611b58565b50565b6009546060906001600160a01b031615610c8657600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610bc157600080fd5b505afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190612ca6565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c819190810190612d35565b905090565b5060408051600081526020810190915290565b610ca1611b6a565b6000610cb56009546001600160a01b031690565b90506001600160a01b038116610cf7576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610d259030908890600401612de7565b600060405180830381600087803b158015610d3f57600080fd5b505af1158015610d53573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b158015610daf57600080fd5b505af1158015610dc3573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b158015610e2057600080fd5b505af1158015610e34573d6000803e3d6000fd5b5050505050505050565b6000818152600260205260408120546001600160a01b0316806105dc5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161072c565b610eab611b6a565b610ec671721c310194ccfc01e523fc93c9cccfa2a0ac61114c565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090610efe903090600190600401612de7565b600060405180830381600087803b158015610f1857600080fd5b505af1158015610f2c573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b158015610f8157600080fd5b505af1158015610f95573d6000803e3d6000fd5b50505050565b60006001600160a01b0382166110195760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e65720000000000000000000000000000000000000000000000606482015260840161072c565b506001600160a01b031660009081526003602052604090205490565b61103d611b6e565b6110476000611bc8565b565b6060600780546105f190612bf7565b6009546000906001600160a01b031615610b2557600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ef9190612ca6565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610ad5565b610b378282611c27565b610b37338383611c41565b611154611b6a565b60006001600160a01b0382163b156111e2576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b1580156111a657600080fd5b505afa9250505080156111d6575060408051601f3d908101601f191682019092526111d391810190612d18565b60015b6111df576111e2565b90505b6001600160a01b038216158015906111f8575080155b1561122f576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6112b033836118aa565b6113225760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f76656400000000000000000000000000000000000000606482015260840161072c565b610f9584848484611d10565b60408051606081018252600080825260208201819052918101919091526009546001600160a01b0316156113d757600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561139f57600080fd5b505afa1580156113b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190612ca6565b50604080516060810182526000808252602082018190529181019190915290565b6060611403826117cb565b600061141a60408051602081019091526000815290565b9050600081511161143a5760405180602001604052806000815250610882565b8061144484611d99565b604051602001611455929190612e04565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610c8657600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b1580156114ca57600080fd5b505afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190612ca6565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610c2d565b611543611b6e565b6001600160a01b0381166115bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161072c565b610b5f81611bc8565b6115d0611b6a565b6115d98461114c565b604051630368065360e61b81526001600160a01b0385169063da0194c0906116079030908790600401612de7565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561169157600080fd5b505af11580156116a5573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401610e06565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166117885760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c656400000000000000000000604482015260640161072c565b919050565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806105dc57506105dc82611e43565b6000818152600260205260409020546001600160a01b0316610b5f5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161072c565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061187182610e3e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806118b683610e3e565b9050806001600160a01b0316846001600160a01b031614806118fd57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806119215750836001600160a01b031661191684610674565b6001600160a01b0316145b949350505050565b826001600160a01b031661193c82610e3e565b6001600160a01b0316146119a05760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161072c565b6001600160a01b038216611a1b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161072c565b611a288383836001611e81565b826001600160a01b0316611a3b82610e3e565b6001600160a01b031614611a9f5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161072c565b6000818152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46107eb8383836001611eaf565b611b4e8282611ed6565b610b378282611fb5565b611b6181612165565b610b5f8161221f565b6110475b6008546001600160a01b031633146110475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161072c565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b378282604051806020016040528060008152506122ae565b816001600160a01b0316836001600160a01b03161415611ca35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161072c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d1b848484611929565b611d2784848484612337565b610f955760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161072c565b60606000611da68361249a565b600101905060008167ffffffffffffffff811115611dc657611dc6612a1e565b6040519080825280601f01601f191660200182016040528015611df0576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611e3657611e3b565b611dfa565b509392505050565b60006001600160e01b031982167f86455d280000000000000000000000000000000000000000000000000000000014806105dc57506105dc8261257c565b60005b81811015611ea857611ea08585611e9b8487612e33565b6125fe565b600101611e84565b5050505050565b60005b81811015611ea857611ece8585611ec98487612e33565b61265a565b600101611eb2565b6001600160a01b038216611f16576040517fa3d450ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b158015611f9957600080fd5b505af1158015611fad573d6000803e3d6000fd5b505050505050565b6001600160a01b03821661200b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161072c565b6000818152600260205260409020546001600160a01b0316156120705760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161072c565b61207e600083836001611e81565b6000818152600260205260409020546001600160a01b0316156120e35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161072c565b6001600160a01b0382166000818152600360209081526040808320805460010190558483526002909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610b37600083836001611eaf565b600061217082610e3e565b9050612180816000846001611e81565b61218982610e3e565b6000838152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610b37816000846001611eaf565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b15801561229a57600080fd5b505af1158015611ea8573d6000803e3d6000fd5b6122b88383611b44565b6122c56000848484612337565b6107eb5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161072c565b60006001600160a01b0384163b1561248f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061237b903390899088908890600401612e4b565b602060405180830381600087803b15801561239557600080fd5b505af19250505080156123c5575060408051601f3d908101601f191682019092526123c291810190612e87565b60015b612475573d8080156123f3576040519150601f19603f3d011682016040523d82523d6000602084013e6123f8565b606091505b50805161246d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161072c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611921565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106124e3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061250f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061252d57662386f26fc10000830492506010015b6305f5e1008310612545576305f5e100830492506008015b612710831061255957612710830492506004015b6064831061256b576064830492506002015b600a83106105dc5760010192915050565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806125df57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105dc57506301ffc9a760e01b6001600160e01b03198316146105dc565b6001600160a01b0383811615908316158180156126185750805b1561263657604051635cbd944160e01b815260040160405180910390fd5b8115612642575b611ea8565b801561264d5761263d565b611ea833868686346126a8565b6001600160a01b0383811615908316158180156126745750805b1561269257604051635cbd944160e01b815260040160405180910390fd5b811561269d5761263d565b801561263d5761263d565b6009546001600160a01b031615611ea85760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561270e57600080fd5b505afa158015612722573d6000803e3d6000fd5b505050505050505050565b6001600160e01b031981168114610b5f57600080fd5b60006020828403121561275557600080fd5b81356108828161272d565b60005b8381101561277b578181015183820152602001612763565b83811115610f955750506000910152565b600081518084526127a4816020860160208601612760565b601f01601f19169290920160200192915050565b602081526000610882602083018461278c565b6000602082840312156127dd57600080fd5b5035919050565b6001600160a01b0381168114610b5f57600080fd5b6000806040838503121561280c57600080fd5b8235612817816127e4565b946020939093013593505050565b60008060006060848603121561283a57600080fd5b8335612845816127e4565b92506020840135612855816127e4565b91506040840135612865816127e4565b809150509250925092565b6007811061288e57634e487b7160e01b600052602160045260246000fd5b9052565b602081016105dc8284612870565b6000806000606084860312156128b557600080fd5b83356128c0816127e4565b925060208401356128d0816127e4565b929592945050506040919091013590565b600080604083850312156128f457600080fd5b50508035926020909101359150565b60006020828403121561291557600080fd5b8135610882816127e4565b6020808252825182820181905260009190848201906040850190845b818110156129615783516001600160a01b03168352928401929184019160010161293c565b50909695505050505050565b60078110610b5f57600080fd5b6effffffffffffffffffffffffffffff81168114610b5f57600080fd5b6000806000606084860312156129ac57600080fd5b83356129b78161296d565b925060208401356129c78161297a565b915060408401356128658161297a565b8015158114610b5f57600080fd5b600080604083850312156129f857600080fd5b8235612a03816127e4565b91506020830135612a13816129d7565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612a5d57612a5d612a1e565b604052919050565b60008060008060808587031215612a7b57600080fd5b8435612a86816127e4565b9350602085810135612a97816127e4565b935060408601359250606086013567ffffffffffffffff80821115612abb57600080fd5b818801915088601f830112612acf57600080fd5b813581811115612ae157612ae1612a1e565b612af3601f8201601f19168501612a34565b91508082528984828501011115612b0957600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000606082019050612b3c828451612870565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b60008060408385031215612b8057600080fd5b8235612b8b816127e4565b91506020830135612a13816127e4565b60008060008060808587031215612bb157600080fd5b8435612bbc816127e4565b93506020850135612bcc8161296d565b92506040850135612bdc8161297a565b91506060850135612bec8161297a565b939692955090935050565b600181811c90821680612c0b57607f821691505b60208210811415612c2c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612c4457600080fd5b8151610882816127e4565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612c7f57612c7f612c4f565b500290565b600082612ca157634e487b7160e01b600052601260045260246000fd5b500490565b600060608284031215612cb857600080fd5b6040516060810181811067ffffffffffffffff82111715612cdb57612cdb612a1e565b6040528251612ce98161296d565b81526020830151612cf98161297a565b60208201526040830151612d0c8161297a565b60408201529392505050565b600060208284031215612d2a57600080fd5b8151610882816129d7565b60006020808385031215612d4857600080fd5b825167ffffffffffffffff80821115612d6057600080fd5b818501915085601f830112612d7457600080fd5b815181811115612d8657612d86612a1e565b8060051b9150612d97848301612a34565b8181529183018401918481019088841115612db157600080fd5b938501935b83851015612ddb5784519250612dcb836127e4565b8282529385019390850190612db6565b98975050505050505050565b6001600160a01b0383168152604081016108826020830184612870565b60008351612e16818460208801612760565b835190830190612e2a818360208801612760565b01949350505050565b60008219821115612e4657612e46612c4f565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612e7d608083018461278c565b9695505050505050565b600060208284031215612e9957600080fd5b81516108828161272d56fea26469706673582212205f88fe1230fd758bd9b12387b1733d029312fd8939e8325a9ee578c2cd64d7ba64736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102775760003560e01c80636352211e11610160578063a22cb465116100d8578063d007af5c1161008c578063e985e9c511610071578063e985e9c51461056f578063f2fde38b146105ab578063fd762d92146105be57600080fd5b8063d007af5c1461055e578063d73792a91461056657600080fd5b8063b88d4fde116100bd578063b88d4fde14610523578063be537f4314610536578063c87b56dd1461054b57600080fd5b8063a22cb465146104fd578063a9fc664e1461051057600080fd5b806381ddcc1f1161012f57806395d89b411161011457806395d89b41146104cf5780639d645a44146104d7578063a1448194146104ea57600080fd5b806381ddcc1f146104975780638da5cb5b146104be57600080fd5b80636352211e146104535780636c3b86991461046657806370a082311461046e578063715018a61461048f57600080fd5b806323b872dd116101f357806342842e0e116101c2578063495c8bf9116101a7578063495c8bf9146104035780635d4c1d4614610418578063613471621461044057600080fd5b806342842e0e146103dd57806342966c68146103f057600080fd5b806323b872dd146103725780632a55205a146103855780632e8da829146103b757806340c10f19146103ca57600080fd5b8063095ea7b31161024a578063115767561161022f57806311576756146103235780631b25b0771461034a5780631c33b3281461035d57600080fd5b8063095ea7b3146102fd578063098144d41461031257600080fd5b8063014635461461027c57806301ffc9a7146102b257806306fdde03146102d5578063081812fc146102ea575b600080fd5b61029571721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6102c56102c0366004612743565b6105d1565b60405190151581526020016102a9565b6102dd6105e2565b6040516102a991906127b8565b6102956102f83660046127cb565b610674565b61031061030b3660046127f9565b61069b565b005b6009546001600160a01b0316610295565b6102957f000000000000000000000000000000000000000000000000000000000000000081565b6102c5610358366004612825565b6107f0565b610365600181565b6040516102a99190612892565b6103106103803660046128a0565b610889565b6103986103933660046128e1565b610910565b604080516001600160a01b0390931683526020830191909152016102a9565b6102c56103c5366004612903565b6109fb565b6103106103d83660046127f9565b610b2d565b6103106103eb3660046128a0565b610b3b565b6103106103fe3660046127cb565b610b56565b61040b610b62565b6040516102a99190612920565b610420600181565b6040516effffffffffffffffffffffffffffff90911681526020016102a9565b61031061044e366004612997565b610c99565b6102956104613660046127cb565b610e3e565b610310610ea3565b61048161047c366004612903565b610f9b565b6040519081526020016102a9565b610310611035565b6104817f000000000000000000000000000000000000000000000000000000000000000081565b6008546001600160a01b0316610295565b6102dd611049565b6102c56104e5366004612903565b611058565b6103106104f83660046127f9565b611137565b61031061050b3660046129e5565b611141565b61031061051e366004612903565b61114c565b610310610531366004612a65565b6112a6565b61053e61132e565b6040516102a99190612b29565b6102dd6105593660046127cb565b6113f8565b61040b61146b565b61048161271081565b6102c561057d366004612b6d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103106105b9366004612903565b61153b565b6103106105cc366004612b9b565b6115c8565b60006105dc8261178d565b92915050565b6060600680546105f190612bf7565b80601f016020809104026020016040519081016040528092919081815260200182805461061d90612bf7565b801561066a5780601f1061063f5761010080835404028352916020019161066a565b820191906000526020600020905b81548152906001019060200180831161064d57829003601f168201915b5050505050905090565b600061067f826117cb565b506000908152600460205260409020546001600160a01b031690565b60006106a682610e3e565b9050806001600160a01b0316836001600160a01b031614156107355760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061076f57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6107e15760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161072c565b6107eb838361182f565b505050565b6009546000906001600160a01b03161561087e5760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561085957600080fd5b505afa92505050801561086a575060015b61087657506000610882565b506001610882565b5060015b9392505050565b61089333826118aa565b6109055760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f76656400000000000000000000000000000000000000606482015260840161072c565b6107eb838383611929565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e866040518263ffffffff1660e01b815260040161096391815260200190565b60206040518083038186803b15801561097b57600080fd5b505afa9250505080156109ab575060408051601f3d908101601f191682019092526109a891810190612c32565b60015b6109b4576109b7565b90505b806127106109e57f000000000000000000000000000000000000000000000000000000000000000087612c65565b6109ef9190612c84565b92509250509250929050565b6009546000906001600160a01b031615610b2557600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610a5a57600080fd5b505afa158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a929190612ca6565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610aed57600080fd5b505afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190612d18565b506000919050565b610b378282611b44565b5050565b6107eb838383604051806020016040528060008152506112a6565b610b5f81611b58565b50565b6009546060906001600160a01b031615610c8657600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610bc157600080fd5b505afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190612ca6565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c819190810190612d35565b905090565b5060408051600081526020810190915290565b610ca1611b6a565b6000610cb56009546001600160a01b031690565b90506001600160a01b038116610cf7576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610d259030908890600401612de7565b600060405180830381600087803b158015610d3f57600080fd5b505af1158015610d53573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b158015610daf57600080fd5b505af1158015610dc3573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b158015610e2057600080fd5b505af1158015610e34573d6000803e3d6000fd5b5050505050505050565b6000818152600260205260408120546001600160a01b0316806105dc5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161072c565b610eab611b6a565b610ec671721c310194ccfc01e523fc93c9cccfa2a0ac61114c565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090610efe903090600190600401612de7565b600060405180830381600087803b158015610f1857600080fd5b505af1158015610f2c573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b158015610f8157600080fd5b505af1158015610f95573d6000803e3d6000fd5b50505050565b60006001600160a01b0382166110195760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e65720000000000000000000000000000000000000000000000606482015260840161072c565b506001600160a01b031660009081526003602052604090205490565b61103d611b6e565b6110476000611bc8565b565b6060600780546105f190612bf7565b6009546000906001600160a01b031615610b2557600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ef9190612ca6565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610ad5565b610b378282611c27565b610b37338383611c41565b611154611b6a565b60006001600160a01b0382163b156111e2576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b1580156111a657600080fd5b505afa9250505080156111d6575060408051601f3d908101601f191682019092526111d391810190612d18565b60015b6111df576111e2565b90505b6001600160a01b038216158015906111f8575080155b1561122f576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6112b033836118aa565b6113225760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f76656400000000000000000000000000000000000000606482015260840161072c565b610f9584848484611d10565b60408051606081018252600080825260208201819052918101919091526009546001600160a01b0316156113d757600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561139f57600080fd5b505afa1580156113b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190612ca6565b50604080516060810182526000808252602082018190529181019190915290565b6060611403826117cb565b600061141a60408051602081019091526000815290565b9050600081511161143a5760405180602001604052806000815250610882565b8061144484611d99565b604051602001611455929190612e04565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610c8657600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b1580156114ca57600080fd5b505afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115029190612ca6565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610c2d565b611543611b6e565b6001600160a01b0381166115bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161072c565b610b5f81611bc8565b6115d0611b6a565b6115d98461114c565b604051630368065360e61b81526001600160a01b0385169063da0194c0906116079030908790600401612de7565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561169157600080fd5b505af11580156116a5573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401610e06565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166117885760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c656400000000000000000000604482015260640161072c565b919050565b60006001600160e01b031982167f2a55205a0000000000000000000000000000000000000000000000000000000014806105dc57506105dc82611e43565b6000818152600260205260409020546001600160a01b0316610b5f5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161072c565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061187182610e3e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806118b683610e3e565b9050806001600160a01b0316846001600160a01b031614806118fd57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806119215750836001600160a01b031661191684610674565b6001600160a01b0316145b949350505050565b826001600160a01b031661193c82610e3e565b6001600160a01b0316146119a05760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161072c565b6001600160a01b038216611a1b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161072c565b611a288383836001611e81565b826001600160a01b0316611a3b82610e3e565b6001600160a01b031614611a9f5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161072c565b6000818152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46107eb8383836001611eaf565b611b4e8282611ed6565b610b378282611fb5565b611b6181612165565b610b5f8161221f565b6110475b6008546001600160a01b031633146110475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161072c565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b378282604051806020016040528060008152506122ae565b816001600160a01b0316836001600160a01b03161415611ca35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161072c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d1b848484611929565b611d2784848484612337565b610f955760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161072c565b60606000611da68361249a565b600101905060008167ffffffffffffffff811115611dc657611dc6612a1e565b6040519080825280601f01601f191660200182016040528015611df0576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611e3657611e3b565b611dfa565b509392505050565b60006001600160e01b031982167f86455d280000000000000000000000000000000000000000000000000000000014806105dc57506105dc8261257c565b60005b81811015611ea857611ea08585611e9b8487612e33565b6125fe565b600101611e84565b5050505050565b60005b81811015611ea857611ece8585611ec98487612e33565b61265a565b600101611eb2565b6001600160a01b038216611f16576040517fa3d450ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b158015611f9957600080fd5b505af1158015611fad573d6000803e3d6000fd5b505050505050565b6001600160a01b03821661200b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161072c565b6000818152600260205260409020546001600160a01b0316156120705760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161072c565b61207e600083836001611e81565b6000818152600260205260409020546001600160a01b0316156120e35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161072c565b6001600160a01b0382166000818152600360209081526040808320805460010190558483526002909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610b37600083836001611eaf565b600061217082610e3e565b9050612180816000846001611e81565b61218982610e3e565b6000838152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610b37816000846001611eaf565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b15801561229a57600080fd5b505af1158015611ea8573d6000803e3d6000fd5b6122b88383611b44565b6122c56000848484612337565b6107eb5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161072c565b60006001600160a01b0384163b1561248f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061237b903390899088908890600401612e4b565b602060405180830381600087803b15801561239557600080fd5b505af19250505080156123c5575060408051601f3d908101601f191682019092526123c291810190612e87565b60015b612475573d8080156123f3576040519150601f19603f3d011682016040523d82523d6000602084013e6123f8565b606091505b50805161246d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161072c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611921565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106124e3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061250f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061252d57662386f26fc10000830492506010015b6305f5e1008310612545576305f5e100830492506008015b612710831061255957612710830492506004015b6064831061256b576064830492506002015b600a83106105dc5760010192915050565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806125df57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105dc57506301ffc9a760e01b6001600160e01b03198316146105dc565b6001600160a01b0383811615908316158180156126185750805b1561263657604051635cbd944160e01b815260040160405180910390fd5b8115612642575b611ea8565b801561264d5761263d565b611ea833868686346126a8565b6001600160a01b0383811615908316158180156126745750805b1561269257604051635cbd944160e01b815260040160405180910390fd5b811561269d5761263d565b801561263d5761263d565b6009546001600160a01b031615611ea85760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561270e57600080fd5b505afa158015612722573d6000803e3d6000fd5b505050505050505050565b6001600160e01b031981168114610b5f57600080fd5b60006020828403121561275557600080fd5b81356108828161272d565b60005b8381101561277b578181015183820152602001612763565b83811115610f955750506000910152565b600081518084526127a4816020860160208601612760565b601f01601f19169290920160200192915050565b602081526000610882602083018461278c565b6000602082840312156127dd57600080fd5b5035919050565b6001600160a01b0381168114610b5f57600080fd5b6000806040838503121561280c57600080fd5b8235612817816127e4565b946020939093013593505050565b60008060006060848603121561283a57600080fd5b8335612845816127e4565b92506020840135612855816127e4565b91506040840135612865816127e4565b809150509250925092565b6007811061288e57634e487b7160e01b600052602160045260246000fd5b9052565b602081016105dc8284612870565b6000806000606084860312156128b557600080fd5b83356128c0816127e4565b925060208401356128d0816127e4565b929592945050506040919091013590565b600080604083850312156128f457600080fd5b50508035926020909101359150565b60006020828403121561291557600080fd5b8135610882816127e4565b6020808252825182820181905260009190848201906040850190845b818110156129615783516001600160a01b03168352928401929184019160010161293c565b50909695505050505050565b60078110610b5f57600080fd5b6effffffffffffffffffffffffffffff81168114610b5f57600080fd5b6000806000606084860312156129ac57600080fd5b83356129b78161296d565b925060208401356129c78161297a565b915060408401356128658161297a565b8015158114610b5f57600080fd5b600080604083850312156129f857600080fd5b8235612a03816127e4565b91506020830135612a13816129d7565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612a5d57612a5d612a1e565b604052919050565b60008060008060808587031215612a7b57600080fd5b8435612a86816127e4565b9350602085810135612a97816127e4565b935060408601359250606086013567ffffffffffffffff80821115612abb57600080fd5b818801915088601f830112612acf57600080fd5b813581811115612ae157612ae1612a1e565b612af3601f8201601f19168501612a34565b91508082528984828501011115612b0957600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000606082019050612b3c828451612870565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b60008060408385031215612b8057600080fd5b8235612b8b816127e4565b91506020830135612a13816127e4565b60008060008060808587031215612bb157600080fd5b8435612bbc816127e4565b93506020850135612bcc8161296d565b92506040850135612bdc8161297a565b91506060850135612bec8161297a565b939692955090935050565b600181811c90821680612c0b57607f821691505b60208210811415612c2c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612c4457600080fd5b8151610882816127e4565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612c7f57612c7f612c4f565b500290565b600082612ca157634e487b7160e01b600052601260045260246000fd5b500490565b600060608284031215612cb857600080fd5b6040516060810181811067ffffffffffffffff82111715612cdb57612cdb612a1e565b6040528251612ce98161296d565b81526020830151612cf98161297a565b60208201526040830151612d0c8161297a565b60408201529392505050565b600060208284031215612d2a57600080fd5b8151610882816129d7565b60006020808385031215612d4857600080fd5b825167ffffffffffffffff80821115612d6057600080fd5b818501915085601f830112612d7457600080fd5b815181811115612d8657612d86612a1e565b8060051b9150612d97848301612a34565b8181529183018401918481019088841115612db157600080fd5b938501935b83851015612ddb5784519250612dcb836127e4565b8282529385019390850190612db6565b98975050505050505050565b6001600160a01b0383168152604081016108826020830184612870565b60008351612e16818460208801612760565b835190830190612e2a818360208801612760565b01949350505050565b60008219821115612e4657612e46612c4f565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612e7d608083018461278c565b9695505050505050565b600060208284031215612e9957600080fd5b81516108828161272d56fea26469706673582212205f88fe1230fd758bd9b12387b1733d029312fd8939e8325a9ee578c2cd64d7ba64736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
