{
  "_format": "hh-sol-artifact-1",
  "contractName": "ExchangeMonthlyLimitsTest",
  "sourceName": "contracts/compliance/legacy/test/ExchangeMonthlyLimitsTest.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newExchangeID",
          "type": "address"
        }
      ],
      "name": "ExchangeIDAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        }
      ],
      "name": "ExchangeIDRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newExchangeMonthlyLimit",
          "type": "uint256"
        }
      ],
      "name": "ExchangeMonthlyLimitUpdated",
      "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": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "TokenAgentAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "TokenAgentRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "TokenBound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "TokenUnbound",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        }
      ],
      "name": "addExchangeID",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "addTokenAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "bindToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "canTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "complianceCheckOnExchangeMonthlyLimits",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "created",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "destroyed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        }
      ],
      "name": "getExchangeMonthlyLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_investorID",
          "type": "address"
        }
      ],
      "name": "getMonthlyCounter",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_investorID",
          "type": "address"
        }
      ],
      "name": "getMonthlyTimer",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        }
      ],
      "name": "isExchangeID",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "isTokenAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isTokenBound",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        }
      ],
      "name": "removeExchangeID",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "removeTokenAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_exchangeID",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_newExchangeMonthlyLimit",
          "type": "uint256"
        }
      ],
      "name": "setExchangeMonthlyLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenBound",
      "outputs": [
        {
          "internalType": "contract IToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transferred",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "unbindToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6113998061007e6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806393e62f07116100de578063ca63968d11610097578063d22579fb11610071578063d22579fb1461035f578063e46638e614610372578063f2fde38b14610385578063ff3e69541461039857600080fd5b8063ca63968d146102fd578063cdde293214610310578063ce32926d1461032357600080fd5b806393e62f071461026757806395c5dbfc1461027a57806397a6278e146102b1578063993e8b95146102c4578063a9336def146102d7578063bba58c29146102ea57600080fd5b8063715018a611610130578063715018a61461020157806374436d971461020957806384e798421461021c5780638baf29b41461022f5780638d2ea772146101ee5780638da5cb5b1461024257600080fd5b80631ffbb064146101785780632bb5e721146101a0578063346531fa146101b55780633ff5aa02146101c857806340db3b50146101db5780635f8dead3146101ee575b600080fd5b61018b6101863660046111d6565b6103ab565b60405190151581526020015b60405180910390f35b6101b36101ae3660046111d6565b6103be565b005b61018b6101c33660046111d6565b610488565b6101b36101d63660046111d6565b610531565b6101b36101e93660046111d6565b61060f565b6101b36101fc3660046111f3565b610731565b6101b3610759565b6101b36102173660046111d6565b61076d565b6101b361022a3660046111d6565b61081b565b6101b361023d36600461121f565b6108bb565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610197565b60035461024f906001600160a01b031681565b6102a36102883660046111d6565b6001600160a01b031660009081526004602052604090205490565b604051908152602001610197565b6101b36102bf3660046111d6565b6108ef565b61018b6102d23660046111d6565b61098f565b6101b36102e53660046111f3565b6109af565b61018b6102f836600461121f565b610a0f565b6102a361030b366004611260565b610b06565b6101b361031e3660046111d6565b610b31565b6102a3610331366004611260565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152206001015490565b61018b61036d3660046111d6565b610bf2565b61018b61038036600461121f565b610c10565b6101b36103933660046111d6565b610c33565b6101b36103a63660046111d6565b610cac565b60006103b8600183610d71565b92915050565b6103c6610df4565b6103cf81610bf2565b1561042d5760405162461bcd60e51b8152602060048201526024808201527f4f4e434841494e494420616c7265616479207461676765642061732065786368604482015263616e676560e01b60648201526084015b60405180910390fd5b6001600160a01b038116600081815260066020908152604091829020805460ff1916600117905590519182527fca661533a567195376b79f20fcbcca20e62ceea1d43efacba5f8028329da8e6b91015b60405180910390a150565b6001600160a01b03811660009081526002602052604081205460ff1615801561051c57506003546040516307feec1960e21b81526001600160a01b03848116600483015290911690631ffbb06490602401602060405180830381865afa1580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a9190611299565b155b1561052957506000919050565b506001919050565b336105446000546001600160a01b031690565b6001600160a01b0316148061057557506003546001600160a01b03161580156105755750336001600160a01b038216145b6105c15760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e6572206f7220746f6b656e2063616e2063616c6c000000006044820152606401610424565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f2de35142b19ed5a07796cf30791959c592018f70b1d2d7c460eef8ffe713692b9060200161047d565b336106226000546001600160a01b031690565b6001600160a01b0316148061063f5750336001600160a01b038216145b61068b5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e6572206f7220746f6b656e2063616e2063616c6c000000006044820152606401610424565b6003546001600160a01b038281169116146106e85760405162461bcd60e51b815260206004820152601760248201527f5468697320746f6b656e206973206e6f7420626f756e640000000000000000006044820152606401610424565b600380546001600160a01b03191690556040516001600160a01b03821681527f28a4ca7134a3b3f9aff286e79ad3daadb4a06d1b43d037a3a98bdc074edd9b7a9060200161047d565b610739610e4e565b6107555760405162461bcd60e51b8152600401610424906112bb565b5050565b610761610df4565b61076b6000610e5e565b565b610775610df4565b61077e81610bf2565b6107ca5760405162461bcd60e51b815260206004820181905260248201527f4f4e434841494e4944206e6f74207461676765642061732065786368616e67656044820152606401610424565b6001600160a01b038116600081815260066020908152604091829020805460ff1916905590519182527fc59743ca46d36b7cf42c36211a2fbef12e10aec1bfc9d39eccf91b6976a260f5910161047d565b610823610df4565b6001600160a01b0381166108795760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610424565b610884600182610eae565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6108c3610e4e565b6108df5760405162461bcd60e51b8152600401610424906112bb565b6108ea838383610f2a565b505050565b6108f7610df4565b6001600160a01b03811661094d5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610424565b610958600182610f76565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6003546000906001600160a01b0383811691161461052957506000919050565b6109b7610df4565b6001600160a01b038216600081815260046020908152604091829020849055815192835282018390527f046e8d44ac13395246a46d2f1065db8724b7c6aa2b9dd481327c2687c3ad9efd910160405180910390a15050565b600080610a1b85610ff8565b90506000610a2885610ff8565b9050610a3386610488565b158015610a4857506001600160a01b03861615155b15610af857610a5681610bf2565b15610af8576001600160a01b038116600090815260046020526040902054841115610a8657600092505050610aff565b6001600160a01b0381811660009081526005602090815260408083209386168352929052206001015442108015610ae857506001600160a01b03811660009081526004602052604090205484610adc8385610b06565b610ae69190611325565b115b15610af857600092505050610aff565b6001925050505b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610b39610df4565b6001600160a01b03811660009081526002602052604090205460ff16610ba15760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e74206973206e6f742072656769737465726564207965746044820152606401610424565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527f6a659bb87bb23efbdc295f8eed8ae8c4379bfb77660ced2ef0f3d7d26b05c6a6910161047d565b6001600160a01b031660009081526006602052604090205460ff1690565b6000610c1d848484610a0f565b610c2957506000610aff565b5060019392505050565b610c3b610df4565b6001600160a01b038116610ca05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610424565b610ca981610e5e565b50565b610cb4610df4565b6001600160a01b03811660009081526002602052604090205460ff1615610d1d5760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e7420697320616c726561647920726567697374657265646044820152606401610424565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fd62c45e13ac30396aceb3ad37c89bd1ba9048032fe61679000e92eb93dbfd67d910161047d565b60006001600160a01b038216610dd45760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610424565b506001600160a01b03166000908152602091909152604090205460ff1690565b6000546001600160a01b0316331461076b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610424565b6000610e593361098f565b905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610eb88282610d71565b15610f055760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610424565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000610f3584610ff8565b90506000610f4284610ff8565b9050610f4d81610bf2565b8015610f5f5750610f5d85610488565b155b15610f6f57610f6f8282856110d2565b5050505050565b610f808282610d71565b610fd65760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610424565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600354604080516304d3863d60e21b815290516000926001600160a01b03169163134e18f49160048083019260209291908290030181865afa158015611042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110669190611346565b604051633c3ad79560e21b81526001600160a01b038481166004830152919091169063f0eb5e5490602401602060405180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b89190611346565b6110dc8383611150565b6001600160a01b038316600090815260046020526040902054816111008585610b06565b61110a9190611325565b116108ea576001600160a01b03808416600090815260056020908152604080832093861683529290529081208054839290611146908490611325565b9091555050505050565b6001600160a01b0380831660009081526005602090815260408083209385168352929052206001015442106107555761118c4262278d00611325565b6001600160a01b0392831660009081526005602090815260408083209490951682529290925291812060018101929092559055565b6001600160a01b0381168114610ca957600080fd5b6000602082840312156111e857600080fd5b8135610aff816111c1565b6000806040838503121561120657600080fd5b8235611211816111c1565b946020939093013593505050565b60008060006060848603121561123457600080fd5b833561123f816111c1565b9250602084013561124f816111c1565b929592945050506040919091013590565b6000806040838503121561127357600080fd5b823561127e816111c1565b9150602083013561128e816111c1565b809150509250929050565b6000602082840312156112ab57600080fd5b81518015158114610aff57600080fd5b60208082526044908201527f6572726f72203a20746869732061646472657373206973206e6f74206120746f60408201527f6b656e20626f756e6420746f2074686520636f6d706c69616e636520636f6e746060820152631c9858dd60e21b608082015260a00190565b808201808211156103b857634e487b7160e01b600052601160045260246000fd5b60006020828403121561135857600080fd5b8151610aff816111c156fea26469706673582212202b3d49f0a0409a938a0aace6ec241c9e3ce3a56daca81c5797990eb97cc3d23e64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101735760003560e01c806393e62f07116100de578063ca63968d11610097578063d22579fb11610071578063d22579fb1461035f578063e46638e614610372578063f2fde38b14610385578063ff3e69541461039857600080fd5b8063ca63968d146102fd578063cdde293214610310578063ce32926d1461032357600080fd5b806393e62f071461026757806395c5dbfc1461027a57806397a6278e146102b1578063993e8b95146102c4578063a9336def146102d7578063bba58c29146102ea57600080fd5b8063715018a611610130578063715018a61461020157806374436d971461020957806384e798421461021c5780638baf29b41461022f5780638d2ea772146101ee5780638da5cb5b1461024257600080fd5b80631ffbb064146101785780632bb5e721146101a0578063346531fa146101b55780633ff5aa02146101c857806340db3b50146101db5780635f8dead3146101ee575b600080fd5b61018b6101863660046111d6565b6103ab565b60405190151581526020015b60405180910390f35b6101b36101ae3660046111d6565b6103be565b005b61018b6101c33660046111d6565b610488565b6101b36101d63660046111d6565b610531565b6101b36101e93660046111d6565b61060f565b6101b36101fc3660046111f3565b610731565b6101b3610759565b6101b36102173660046111d6565b61076d565b6101b361022a3660046111d6565b61081b565b6101b361023d36600461121f565b6108bb565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610197565b60035461024f906001600160a01b031681565b6102a36102883660046111d6565b6001600160a01b031660009081526004602052604090205490565b604051908152602001610197565b6101b36102bf3660046111d6565b6108ef565b61018b6102d23660046111d6565b61098f565b6101b36102e53660046111f3565b6109af565b61018b6102f836600461121f565b610a0f565b6102a361030b366004611260565b610b06565b6101b361031e3660046111d6565b610b31565b6102a3610331366004611260565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152206001015490565b61018b61036d3660046111d6565b610bf2565b61018b61038036600461121f565b610c10565b6101b36103933660046111d6565b610c33565b6101b36103a63660046111d6565b610cac565b60006103b8600183610d71565b92915050565b6103c6610df4565b6103cf81610bf2565b1561042d5760405162461bcd60e51b8152602060048201526024808201527f4f4e434841494e494420616c7265616479207461676765642061732065786368604482015263616e676560e01b60648201526084015b60405180910390fd5b6001600160a01b038116600081815260066020908152604091829020805460ff1916600117905590519182527fca661533a567195376b79f20fcbcca20e62ceea1d43efacba5f8028329da8e6b91015b60405180910390a150565b6001600160a01b03811660009081526002602052604081205460ff1615801561051c57506003546040516307feec1960e21b81526001600160a01b03848116600483015290911690631ffbb06490602401602060405180830381865afa1580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a9190611299565b155b1561052957506000919050565b506001919050565b336105446000546001600160a01b031690565b6001600160a01b0316148061057557506003546001600160a01b03161580156105755750336001600160a01b038216145b6105c15760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e6572206f7220746f6b656e2063616e2063616c6c000000006044820152606401610424565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f2de35142b19ed5a07796cf30791959c592018f70b1d2d7c460eef8ffe713692b9060200161047d565b336106226000546001600160a01b031690565b6001600160a01b0316148061063f5750336001600160a01b038216145b61068b5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e6572206f7220746f6b656e2063616e2063616c6c000000006044820152606401610424565b6003546001600160a01b038281169116146106e85760405162461bcd60e51b815260206004820152601760248201527f5468697320746f6b656e206973206e6f7420626f756e640000000000000000006044820152606401610424565b600380546001600160a01b03191690556040516001600160a01b03821681527f28a4ca7134a3b3f9aff286e79ad3daadb4a06d1b43d037a3a98bdc074edd9b7a9060200161047d565b610739610e4e565b6107555760405162461bcd60e51b8152600401610424906112bb565b5050565b610761610df4565b61076b6000610e5e565b565b610775610df4565b61077e81610bf2565b6107ca5760405162461bcd60e51b815260206004820181905260248201527f4f4e434841494e4944206e6f74207461676765642061732065786368616e67656044820152606401610424565b6001600160a01b038116600081815260066020908152604091829020805460ff1916905590519182527fc59743ca46d36b7cf42c36211a2fbef12e10aec1bfc9d39eccf91b6976a260f5910161047d565b610823610df4565b6001600160a01b0381166108795760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610424565b610884600182610eae565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6108c3610e4e565b6108df5760405162461bcd60e51b8152600401610424906112bb565b6108ea838383610f2a565b505050565b6108f7610df4565b6001600160a01b03811661094d5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c696420617267756d656e74202d207a65726f2061646472657373006044820152606401610424565b610958600182610f76565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6003546000906001600160a01b0383811691161461052957506000919050565b6109b7610df4565b6001600160a01b038216600081815260046020908152604091829020849055815192835282018390527f046e8d44ac13395246a46d2f1065db8724b7c6aa2b9dd481327c2687c3ad9efd910160405180910390a15050565b600080610a1b85610ff8565b90506000610a2885610ff8565b9050610a3386610488565b158015610a4857506001600160a01b03861615155b15610af857610a5681610bf2565b15610af8576001600160a01b038116600090815260046020526040902054841115610a8657600092505050610aff565b6001600160a01b0381811660009081526005602090815260408083209386168352929052206001015442108015610ae857506001600160a01b03811660009081526004602052604090205484610adc8385610b06565b610ae69190611325565b115b15610af857600092505050610aff565b6001925050505b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610b39610df4565b6001600160a01b03811660009081526002602052604090205460ff16610ba15760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e74206973206e6f742072656769737465726564207965746044820152606401610424565b6001600160a01b038116600081815260026020908152604091829020805460ff1916905590519182527f6a659bb87bb23efbdc295f8eed8ae8c4379bfb77660ced2ef0f3d7d26b05c6a6910161047d565b6001600160a01b031660009081526006602052604090205460ff1690565b6000610c1d848484610a0f565b610c2957506000610aff565b5060019392505050565b610c3b610df4565b6001600160a01b038116610ca05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610424565b610ca981610e5e565b50565b610cb4610df4565b6001600160a01b03811660009081526002602052604090205460ff1615610d1d5760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e7420697320616c726561647920726567697374657265646044820152606401610424565b6001600160a01b038116600081815260026020908152604091829020805460ff1916600117905590519182527fd62c45e13ac30396aceb3ad37c89bd1ba9048032fe61679000e92eb93dbfd67d910161047d565b60006001600160a01b038216610dd45760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610424565b506001600160a01b03166000908152602091909152604090205460ff1690565b6000546001600160a01b0316331461076b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610424565b6000610e593361098f565b905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610eb88282610d71565b15610f055760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610424565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000610f3584610ff8565b90506000610f4284610ff8565b9050610f4d81610bf2565b8015610f5f5750610f5d85610488565b155b15610f6f57610f6f8282856110d2565b5050505050565b610f808282610d71565b610fd65760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610424565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600354604080516304d3863d60e21b815290516000926001600160a01b03169163134e18f49160048083019260209291908290030181865afa158015611042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110669190611346565b604051633c3ad79560e21b81526001600160a01b038481166004830152919091169063f0eb5e5490602401602060405180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b89190611346565b6110dc8383611150565b6001600160a01b038316600090815260046020526040902054816111008585610b06565b61110a9190611325565b116108ea576001600160a01b03808416600090815260056020908152604080832093861683529290529081208054839290611146908490611325565b9091555050505050565b6001600160a01b0380831660009081526005602090815260408083209385168352929052206001015442106107555761118c4262278d00611325565b6001600160a01b0392831660009081526005602090815260408083209490951682529290925291812060018101929092559055565b6001600160a01b0381168114610ca957600080fd5b6000602082840312156111e857600080fd5b8135610aff816111c1565b6000806040838503121561120657600080fd5b8235611211816111c1565b946020939093013593505050565b60008060006060848603121561123457600080fd5b833561123f816111c1565b9250602084013561124f816111c1565b929592945050506040919091013590565b6000806040838503121561127357600080fd5b823561127e816111c1565b9150602083013561128e816111c1565b809150509250929050565b6000602082840312156112ab57600080fd5b81518015158114610aff57600080fd5b60208082526044908201527f6572726f72203a20746869732061646472657373206973206e6f74206120746f60408201527f6b656e20626f756e6420746f2074686520636f6d706c69616e636520636f6e746060820152631c9858dd60e21b608082015260a00190565b808201808211156103b857634e487b7160e01b600052601160045260246000fd5b60006020828403121561135857600080fd5b8151610aff816111c156fea26469706673582212202b3d49f0a0409a938a0aace6ec241c9e3ce3a56daca81c5797990eb97cc3d23e64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
