{
  "_format": "hh-sol-artifact-1",
  "contractName": "InsuranceFund",
  "sourceName": "contracts/InsuranceFund.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        }
      ],
      "name": "BorrowerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "distributionThreshold",
          "type": "uint256"
        }
      ],
      "name": "DistributionThresholdChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "surplus",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "insuranceFundCapacity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "insuranceFundFreeCollateral",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "distributionThreshold",
          "type": "uint256"
        }
      ],
      "name": "FeeDistributed",
      "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": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "repaidAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenBalanceAfterRepaid",
          "type": "uint256"
        }
      ],
      "name": "Repaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "surplusBeneficiary",
          "type": "address"
        }
      ],
      "name": "SurplusBeneficiaryChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "vault",
          "type": "address"
        }
      ],
      "name": "VaultChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "candidate",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distributeFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBorrower",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDistributionThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInsuranceFundCapacity",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSurplusBeneficiary",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenArg",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "repay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "distributionThreshold",
          "type": "uint256"
        }
      ],
      "name": "setDistributionThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "surplusBeneficiary",
          "type": "address"
        }
      ],
      "name": "setSurplusBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "vaultArg",
          "type": "address"
        }
      ],
      "name": "setVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50612281806100206000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80636c8381f8116100b8578063b9b4744a1161007c578063b9b4744a1461022c578063bc5920ba14610249578063c4d66de814610251578063d0e30db014610277578063d8ab17b51461027f578063efeb8e69146102a557610137565b80636c8381f81461020c578063715018a6146102145780638456cb591461021c5780638d928af8146101645780638da5cb5b1461022457610137565b806326c4e60d116100ff57806326c4e60d146101b25780633f4ba83a146101ba578063402d8883146101c25780635c975abb146101ca5780636817031b146101e657610137565b806313af40351461013c5780631cb0c3e714610164578063213037c41461018857806321df0da7146101a2578063258d8e6a146101aa575b600080fd5b6101626004803603602081101561015257600080fd5b50356001600160a01b03166102ad565b005b61016c610408565b604080516001600160a01b039092168252519081900360200190f35b610190610417565b60408051918252519081900360200190f35b61016c610530565b61016c61053f565b61019061054e565b61016261082c565b610162610893565b6101d2610c40565b604080519115158252519081900360200190f35b610162600480360360208110156101fc57600080fd5b50356001600160a01b0316610c49565b61016c610d46565b610162610d55565b610162610df6565b61016c610e5b565b6101626004803603602081101561024257600080fd5b5035610e6a565b610162610f03565b6101626004803603602081101561026757600080fd5b50356001600160a01b0316610fef565b610162611109565b6101626004803603602081101561029557600080fd5b50356001600160a01b0316611376565b61019061152a565b6102b5611531565b6001600160a01b03166102c6610e5b565b6001600160a01b03161461030a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661034e576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b038281169116141561039a576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b03828116911614156103e6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b60fe546001600160a01b031690565b60fe5460fd546040805163c3b66b3160e01b815230600482015290516000936001600160a01b039081169316918491849163c3b66b31916024808301926020929190829003018186803b15801561046d57600080fd5b505afa158015610481573d6000803e3d6000fd5b505050506040513d602081101561049757600080fd5b5051604080516370a0823160e01b8152306004820152905191925060009161051b916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156104ea57600080fd5b505afa1580156104fe573d6000803e3d6000fd5b505050506040513d602081101561051457600080fd5b5051611540565b9050610527828261158c565b94505050505090565b60fd546001600160a01b031690565b60ff546001600160a01b031690565b600060026001541415610596576040805162461bcd60e51b815260206004820152601f6024820152600080516020612121833981519152604482015290519081900360640190fd5b60026001556105a3610c40565b156105e8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe5460fd5460ff54610100546001600160a01b0393841693928316929091169060009061061590611540565b90506001600160a01b03821661065b576040805162461bcd60e51b815260206004820152600660248201526549465f534e5360d01b604482015290519081900360640190fd5b6000811361069a576040805162461bcd60e51b815260206004820152600760248201526624a32fa22a22ad60c91b604482015290519081900360640190fd5b60006106fd856001600160a01b03166312ca1d1730876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156104ea57600080fd5b90506000610709610417565b9050600061072161071a83866115f8565b600061165d565b905060006107376107328386611674565b611683565b9050801561081c57876001600160a01b031663f3fef3a388836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561079657600080fd5b505af11580156107aa573d6000803e3d6000fd5b505050506107b98787836116da565b7f5b3735d487e9342fbcf11df79c2146f60ffabadb4d2e31ced107fe4346cd21ef816107e485611683565b6107ed87611683565b6107f689611683565b604080519485526020850193909352838301919091526060830152519081900360800190a15b9750505050505050506001805590565b610834611531565b6001600160a01b0316610845610e5b565b6001600160a01b031614610889576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610891611731565b565b600260015414156108d9576040805162461bcd60e51b815260206004820152601f6024820152600080516020612121833981519152604482015290519081900360640190fd5b60026001556108e6610c40565b1561092b576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe5460fd546040805163c3b66b3160e01b815230600482015290516001600160a01b039384169390921691600091849163c3b66b3191602480820192602092909190829003018186803b15801561098257600080fd5b505afa158015610996573d6000803e3d6000fd5b505050506040513d60208110156109ac57600080fd5b50519050600081126109ef576040805162461bcd60e51b815260206004820152600760248201526624a32fa92ba72760c91b604482015290519081900360640190fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610a3e57600080fd5b505afa158015610a52573d6000803e3d6000fd5b505050506040513d6020811015610a6857600080fd5b505190506000610a77836117d1565b9050600081831015610a895782610a8b565b815b9050846001600160a01b031663095ea7b387836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610ae457600080fd5b505af1158015610af8573d6000803e3d6000fd5b505050506040513d6020811015610b0e57600080fd5b5050604080516311f9fbc960e21b81526001600160a01b038781166004830152602482018490529151918816916347e7ef249160448082019260009290919082900301818387803b158015610b6257600080fd5b505af1158015610b76573d6000803e3d6000fd5b505050506000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bc957600080fd5b505afa158015610bdd573d6000803e3d6000fd5b505050506040513d6020811015610bf357600080fd5b5051604080518481526020810183905281519293507f81472a96709c8315c82af40d41ef624a642ad53864b097e53af675593bb4e035929081900390910190a15050600180555050505050565b60995460ff1690565b610c51611531565b6001600160a01b0316610c62610e5b565b6001600160a01b031614610ca6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610cb8816001600160a01b03166117fb565b610cf2576040805162461bcd60e51b815260206004820152600660248201526549465f564e4360d01b604482015290519081900360640190fd5b60fe80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa49691f0dd6477ccef49962612a236d252e3a31c3be8b61fa6abeff3e74a75729181900360200190a150565b6066546001600160a01b031690565b610d5d611531565b6001600160a01b0316610d6e610e5b565b6001600160a01b031614610db2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316906000805160206121b6833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b610dfe611531565b6001600160a01b0316610e0f610e5b565b6001600160a01b031614610e53576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610891611801565b6065546001600160a01b031690565b610e72611531565b6001600160a01b0316610e83610e5b565b6001600160a01b031614610ec7576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6101008190556040805182815290517f826e0631e894a92cd7dee323bccc25ed3a6bee87e9bd0cbc957767dc44ad4a659181900360200190a150565b6066546001600160a01b0316610f48576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610f50611531565b6066546001600160a01b03908116911614610f9b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116906000805160206121b683398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff16806110085750611008611884565b80611016575060005460ff16155b6110515760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff1615801561107c576000805460ff1961ff0019909116610100171660011790555b61108e826001600160a01b03166117fb565b6110c8576040805162461bcd60e51b815260206004820152600660248201526549465f544e4360d01b604482015290519081900360640190fd5b6110d0611895565b6110d861193f565b60fd80546001600160a01b0319166001600160a01b0384161790558015611105576000805461ff00191690555b5050565b611111611531565b6001600160a01b0316611122610e5b565b6001600160a01b031614611166576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b600260015414156111ac576040805162461bcd60e51b815260206004820152601f6024820152600080516020612121833981519152604482015290519081900360640190fd5b60026001556111b9610c40565b156111fe576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe5460fd54604080516370a0823160e01b815230600482015290516001600160a01b03938416939092169160009183916370a0823191602480820192602092909190829003018186803b15801561125557600080fd5b505afa158015611269573d6000803e3d6000fd5b505050506040513d602081101561127f57600080fd5b50516040805163095ea7b360e01b81526001600160a01b0386811660048301526024820184905291519293509084169163095ea7b3916044808201926020929091908290030181600087803b1580156112d757600080fd5b505af11580156112eb573d6000803e3d6000fd5b505050506040513d602081101561130157600080fd5b5050604080516311f9fbc960e21b81526001600160a01b038481166004830152602482018490529151918516916347e7ef249160448082019260009290919082900301818387803b15801561135557600080fd5b505af1158015611369573d6000803e3d6000fd5b5050600180555050505050565b61137e611531565b6001600160a01b031661138f610e5b565b6001600160a01b0316146113d3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6113e5816001600160a01b03166117fb565b61141f576040805162461bcd60e51b815260206004820152600660248201526549465f534e4360d01b604482015290519081900360640190fd5b60fd54604080516321df0da760e01b815290516001600160a01b03928316928416916321df0da7916004808301926020929190829003018186803b15801561146657600080fd5b505afa15801561147a573d6000803e3d6000fd5b505050506040513d602081101561149057600080fd5b50516001600160a01b0316146114d6576040805162461bcd60e51b815260206004820152600660248201526549465f544e4d60d01b604482015290519081900360640190fd5b60ff80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f6d932b1f34b8232aeb85a714eecbab101e949e9df57611b94a68ccc68df23fa89181900360200190a150565b6101005490565b600061153b6119dc565b905090565b60006001600160ff1b038211156115885760405162461bcd60e51b81526004018080602001828103825260288152602001806121d66028913960400191505060405180910390fd5b5090565b60008282018183128015906115a15750838112155b806115b657506000831280156115b657508381125b6115f15760405162461bcd60e51b81526004018080602001828103825260218152602001806121416021913960400191505060405180910390fd5b9392505050565b600081830381831280159061160d5750838113155b80611622575060008312801561162257508381135b6115f15760405162461bcd60e51b81526004018080602001828103825260248152602001806121fe6024913960400191505060405180910390fd5b60008183121561166d57816115f1565b5090919050565b600081831261166d57816115f1565b600080821215611588576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261172c9084906119e0565b505050565b611739610c40565b611781576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117b4611531565b604080516001600160a01b039092168252519081900360200190a1565b6000808212156117ec576117e761073283611a91565b6117f5565b6117f582611683565b92915050565b3b151590565b611809610c40565b1561184e576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117b4611531565b600061188f306117fb565b15905090565b600054610100900460ff16806118ae57506118ae611884565b806118bc575060005460ff16155b6118f75760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611922576000805460ff1961ff0019909116610100171660011790555b61192a611ac6565b801561193c576000805461ff00191690555b50565b600054610100900460ff16806119585750611958611884565b80611966575060005460ff16155b6119a15760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff161580156119cc576000805460ff1961ff0019909116610100171660011790555b6119d4611b6b565b61192a611c5a565b3390565b6000611a35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611cf79092919063ffffffff16565b80519091501561172c57808060200190516020811015611a5457600080fd5b505161172c5760405162461bcd60e51b815260040180806020018281038252602a815260200180612222602a913960400191505060405180910390fd5b6000600160ff1b8213611abf5760405162461bcd60e51b8152600401611ab6906120e9565b60405180910390fd5b5060000390565b600054610100900460ff1680611adf5750611adf611884565b80611aed575060005460ff16155b611b285760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611b53576000805460ff1961ff0019909116610100171660011790555b60018055801561193c576000805461ff001916905550565b600054610100900460ff1680611b845750611b84611884565b80611b92575060005460ff16155b611bcd5760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611bf8576000805460ff1961ff0019909116610100171660011790555b611c00611d0e565b6000611c0a611531565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206121b6833981519152908290a350801561193c576000805461ff001916905550565b600054610100900460ff1680611c735750611c73611884565b80611c81575060005460ff16155b611cbc5760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611ce7576000805460ff1961ff0019909116610100171660011790555b611cef611d9f565b61192a611e3f565b6060611d068484600085611eea565b949350505050565b600054610100900460ff1680611d275750611d27611884565b80611d35575060005460ff16155b611d705760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611d9b576000805460ff1961ff0019909116610100171660011790555b61192a5b600054610100900460ff1680611db85750611db8611884565b80611dc6575060005460ff16155b611e015760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff1615801561192a576000805460ff1961ff001990911661010017166001179055801561193c576000805461ff001916905550565b600054610100900460ff1680611e585750611e58611884565b80611e66575060005460ff16155b611ea15760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611ecc576000805460ff1961ff0019909116610100171660011790555b6099805460ff19169055801561193c576000805461ff001916905550565b606082471015611f2b5760405162461bcd60e51b81526004018080602001828103825260268152602001806121626026913960400191505060405180910390fd5b611f34856117fb565b611f85576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310611fc35780518252601f199092019160209182019101611fa4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612025576040519150601f19603f3d011682016040523d82523d6000602084013e61202a565b606091505b509150915061203a828286612045565b979650505050505050565b606083156120545750816115f1565b8251156120645782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120ae578181015183820152602001612096565b50505050905090810190601f1680156120db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6020808252601c908201527f506572704d6174683a20696e76657273696f6e206f766572666c6f770000000060408201526060019056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c005369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e053616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212202f078e7da3319aa3d368241618a4da8aba20b65cd7cff460b7430d92fd1ca5b164736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c80636c8381f8116100b8578063b9b4744a1161007c578063b9b4744a1461022c578063bc5920ba14610249578063c4d66de814610251578063d0e30db014610277578063d8ab17b51461027f578063efeb8e69146102a557610137565b80636c8381f81461020c578063715018a6146102145780638456cb591461021c5780638d928af8146101645780638da5cb5b1461022457610137565b806326c4e60d116100ff57806326c4e60d146101b25780633f4ba83a146101ba578063402d8883146101c25780635c975abb146101ca5780636817031b146101e657610137565b806313af40351461013c5780631cb0c3e714610164578063213037c41461018857806321df0da7146101a2578063258d8e6a146101aa575b600080fd5b6101626004803603602081101561015257600080fd5b50356001600160a01b03166102ad565b005b61016c610408565b604080516001600160a01b039092168252519081900360200190f35b610190610417565b60408051918252519081900360200190f35b61016c610530565b61016c61053f565b61019061054e565b61016261082c565b610162610893565b6101d2610c40565b604080519115158252519081900360200190f35b610162600480360360208110156101fc57600080fd5b50356001600160a01b0316610c49565b61016c610d46565b610162610d55565b610162610df6565b61016c610e5b565b6101626004803603602081101561024257600080fd5b5035610e6a565b610162610f03565b6101626004803603602081101561026757600080fd5b50356001600160a01b0316610fef565b610162611109565b6101626004803603602081101561029557600080fd5b50356001600160a01b0316611376565b61019061152a565b6102b5611531565b6001600160a01b03166102c6610e5b565b6001600160a01b03161461030a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661034e576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b038281169116141561039a576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b03828116911614156103e6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b60fe546001600160a01b031690565b60fe5460fd546040805163c3b66b3160e01b815230600482015290516000936001600160a01b039081169316918491849163c3b66b31916024808301926020929190829003018186803b15801561046d57600080fd5b505afa158015610481573d6000803e3d6000fd5b505050506040513d602081101561049757600080fd5b5051604080516370a0823160e01b8152306004820152905191925060009161051b916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156104ea57600080fd5b505afa1580156104fe573d6000803e3d6000fd5b505050506040513d602081101561051457600080fd5b5051611540565b9050610527828261158c565b94505050505090565b60fd546001600160a01b031690565b60ff546001600160a01b031690565b600060026001541415610596576040805162461bcd60e51b815260206004820152601f6024820152600080516020612121833981519152604482015290519081900360640190fd5b60026001556105a3610c40565b156105e8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe5460fd5460ff54610100546001600160a01b0393841693928316929091169060009061061590611540565b90506001600160a01b03821661065b576040805162461bcd60e51b815260206004820152600660248201526549465f534e5360d01b604482015290519081900360640190fd5b6000811361069a576040805162461bcd60e51b815260206004820152600760248201526624a32fa22a22ad60c91b604482015290519081900360640190fd5b60006106fd856001600160a01b03166312ca1d1730876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156104ea57600080fd5b90506000610709610417565b9050600061072161071a83866115f8565b600061165d565b905060006107376107328386611674565b611683565b9050801561081c57876001600160a01b031663f3fef3a388836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561079657600080fd5b505af11580156107aa573d6000803e3d6000fd5b505050506107b98787836116da565b7f5b3735d487e9342fbcf11df79c2146f60ffabadb4d2e31ced107fe4346cd21ef816107e485611683565b6107ed87611683565b6107f689611683565b604080519485526020850193909352838301919091526060830152519081900360800190a15b9750505050505050506001805590565b610834611531565b6001600160a01b0316610845610e5b565b6001600160a01b031614610889576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610891611731565b565b600260015414156108d9576040805162461bcd60e51b815260206004820152601f6024820152600080516020612121833981519152604482015290519081900360640190fd5b60026001556108e6610c40565b1561092b576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe5460fd546040805163c3b66b3160e01b815230600482015290516001600160a01b039384169390921691600091849163c3b66b3191602480820192602092909190829003018186803b15801561098257600080fd5b505afa158015610996573d6000803e3d6000fd5b505050506040513d60208110156109ac57600080fd5b50519050600081126109ef576040805162461bcd60e51b815260206004820152600760248201526624a32fa92ba72760c91b604482015290519081900360640190fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610a3e57600080fd5b505afa158015610a52573d6000803e3d6000fd5b505050506040513d6020811015610a6857600080fd5b505190506000610a77836117d1565b9050600081831015610a895782610a8b565b815b9050846001600160a01b031663095ea7b387836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610ae457600080fd5b505af1158015610af8573d6000803e3d6000fd5b505050506040513d6020811015610b0e57600080fd5b5050604080516311f9fbc960e21b81526001600160a01b038781166004830152602482018490529151918816916347e7ef249160448082019260009290919082900301818387803b158015610b6257600080fd5b505af1158015610b76573d6000803e3d6000fd5b505050506000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bc957600080fd5b505afa158015610bdd573d6000803e3d6000fd5b505050506040513d6020811015610bf357600080fd5b5051604080518481526020810183905281519293507f81472a96709c8315c82af40d41ef624a642ad53864b097e53af675593bb4e035929081900390910190a15050600180555050505050565b60995460ff1690565b610c51611531565b6001600160a01b0316610c62610e5b565b6001600160a01b031614610ca6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610cb8816001600160a01b03166117fb565b610cf2576040805162461bcd60e51b815260206004820152600660248201526549465f564e4360d01b604482015290519081900360640190fd5b60fe80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa49691f0dd6477ccef49962612a236d252e3a31c3be8b61fa6abeff3e74a75729181900360200190a150565b6066546001600160a01b031690565b610d5d611531565b6001600160a01b0316610d6e610e5b565b6001600160a01b031614610db2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316906000805160206121b6833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b610dfe611531565b6001600160a01b0316610e0f610e5b565b6001600160a01b031614610e53576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610891611801565b6065546001600160a01b031690565b610e72611531565b6001600160a01b0316610e83610e5b565b6001600160a01b031614610ec7576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6101008190556040805182815290517f826e0631e894a92cd7dee323bccc25ed3a6bee87e9bd0cbc957767dc44ad4a659181900360200190a150565b6066546001600160a01b0316610f48576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610f50611531565b6066546001600160a01b03908116911614610f9b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116906000805160206121b683398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff16806110085750611008611884565b80611016575060005460ff16155b6110515760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff1615801561107c576000805460ff1961ff0019909116610100171660011790555b61108e826001600160a01b03166117fb565b6110c8576040805162461bcd60e51b815260206004820152600660248201526549465f544e4360d01b604482015290519081900360640190fd5b6110d0611895565b6110d861193f565b60fd80546001600160a01b0319166001600160a01b0384161790558015611105576000805461ff00191690555b5050565b611111611531565b6001600160a01b0316611122610e5b565b6001600160a01b031614611166576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b600260015414156111ac576040805162461bcd60e51b815260206004820152601f6024820152600080516020612121833981519152604482015290519081900360640190fd5b60026001556111b9610c40565b156111fe576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe5460fd54604080516370a0823160e01b815230600482015290516001600160a01b03938416939092169160009183916370a0823191602480820192602092909190829003018186803b15801561125557600080fd5b505afa158015611269573d6000803e3d6000fd5b505050506040513d602081101561127f57600080fd5b50516040805163095ea7b360e01b81526001600160a01b0386811660048301526024820184905291519293509084169163095ea7b3916044808201926020929091908290030181600087803b1580156112d757600080fd5b505af11580156112eb573d6000803e3d6000fd5b505050506040513d602081101561130157600080fd5b5050604080516311f9fbc960e21b81526001600160a01b038481166004830152602482018490529151918516916347e7ef249160448082019260009290919082900301818387803b15801561135557600080fd5b505af1158015611369573d6000803e3d6000fd5b5050600180555050505050565b61137e611531565b6001600160a01b031661138f610e5b565b6001600160a01b0316146113d3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6113e5816001600160a01b03166117fb565b61141f576040805162461bcd60e51b815260206004820152600660248201526549465f534e4360d01b604482015290519081900360640190fd5b60fd54604080516321df0da760e01b815290516001600160a01b03928316928416916321df0da7916004808301926020929190829003018186803b15801561146657600080fd5b505afa15801561147a573d6000803e3d6000fd5b505050506040513d602081101561149057600080fd5b50516001600160a01b0316146114d6576040805162461bcd60e51b815260206004820152600660248201526549465f544e4d60d01b604482015290519081900360640190fd5b60ff80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f6d932b1f34b8232aeb85a714eecbab101e949e9df57611b94a68ccc68df23fa89181900360200190a150565b6101005490565b600061153b6119dc565b905090565b60006001600160ff1b038211156115885760405162461bcd60e51b81526004018080602001828103825260288152602001806121d66028913960400191505060405180910390fd5b5090565b60008282018183128015906115a15750838112155b806115b657506000831280156115b657508381125b6115f15760405162461bcd60e51b81526004018080602001828103825260218152602001806121416021913960400191505060405180910390fd5b9392505050565b600081830381831280159061160d5750838113155b80611622575060008312801561162257508381135b6115f15760405162461bcd60e51b81526004018080602001828103825260248152602001806121fe6024913960400191505060405180910390fd5b60008183121561166d57816115f1565b5090919050565b600081831261166d57816115f1565b600080821215611588576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261172c9084906119e0565b505050565b611739610c40565b611781576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117b4611531565b604080516001600160a01b039092168252519081900360200190a1565b6000808212156117ec576117e761073283611a91565b6117f5565b6117f582611683565b92915050565b3b151590565b611809610c40565b1561184e576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117b4611531565b600061188f306117fb565b15905090565b600054610100900460ff16806118ae57506118ae611884565b806118bc575060005460ff16155b6118f75760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611922576000805460ff1961ff0019909116610100171660011790555b61192a611ac6565b801561193c576000805461ff00191690555b50565b600054610100900460ff16806119585750611958611884565b80611966575060005460ff16155b6119a15760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff161580156119cc576000805460ff1961ff0019909116610100171660011790555b6119d4611b6b565b61192a611c5a565b3390565b6000611a35826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611cf79092919063ffffffff16565b80519091501561172c57808060200190516020811015611a5457600080fd5b505161172c5760405162461bcd60e51b815260040180806020018281038252602a815260200180612222602a913960400191505060405180910390fd5b6000600160ff1b8213611abf5760405162461bcd60e51b8152600401611ab6906120e9565b60405180910390fd5b5060000390565b600054610100900460ff1680611adf5750611adf611884565b80611aed575060005460ff16155b611b285760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611b53576000805460ff1961ff0019909116610100171660011790555b60018055801561193c576000805461ff001916905550565b600054610100900460ff1680611b845750611b84611884565b80611b92575060005460ff16155b611bcd5760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611bf8576000805460ff1961ff0019909116610100171660011790555b611c00611d0e565b6000611c0a611531565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206121b6833981519152908290a350801561193c576000805461ff001916905550565b600054610100900460ff1680611c735750611c73611884565b80611c81575060005460ff16155b611cbc5760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611ce7576000805460ff1961ff0019909116610100171660011790555b611cef611d9f565b61192a611e3f565b6060611d068484600085611eea565b949350505050565b600054610100900460ff1680611d275750611d27611884565b80611d35575060005460ff16155b611d705760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611d9b576000805460ff1961ff0019909116610100171660011790555b61192a5b600054610100900460ff1680611db85750611db8611884565b80611dc6575060005460ff16155b611e015760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff1615801561192a576000805460ff1961ff001990911661010017166001179055801561193c576000805461ff001916905550565b600054610100900460ff1680611e585750611e58611884565b80611e66575060005460ff16155b611ea15760405162461bcd60e51b815260040180806020018281038252602e815260200180612188602e913960400191505060405180910390fd5b600054610100900460ff16158015611ecc576000805460ff1961ff0019909116610100171660011790555b6099805460ff19169055801561193c576000805461ff001916905550565b606082471015611f2b5760405162461bcd60e51b81526004018080602001828103825260268152602001806121626026913960400191505060405180910390fd5b611f34856117fb565b611f85576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310611fc35780518252601f199092019160209182019101611fa4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612025576040519150601f19603f3d011682016040523d82523d6000602084013e61202a565b606091505b509150915061203a828286612045565b979650505050505050565b606083156120545750816115f1565b8251156120645782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120ae578181015183820152602001612096565b50505050905090810190601f1680156120db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6020808252601c908201527f506572704d6174683a20696e76657273696f6e206f766572666c6f770000000060408201526060019056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c005369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e053616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212202f078e7da3319aa3d368241618a4da8aba20b65cd7cff460b7430d92fd1ca5b164736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
