{
  "_format": "hh-sol-artifact-1",
  "contractName": "LimitOrderBook",
  "sourceName": "contracts/limitOrder/LimitOrderBook.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "clearingHouseArg",
          "type": "address"
        }
      ],
      "name": "ClearingHouseChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "orderHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "orderType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "positionSize",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "positionNotional",
          "type": "int256"
        }
      ],
      "name": "LimitOrderCancelled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "orderHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "orderType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "keeper",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "exchangedPositionSize",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "exchangedPositionNotional",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "name": "LimitOrderFilled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitOrderRewardVaultArg",
          "type": "address"
        }
      ],
      "name": "LimitOrderRewardVaultChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "minOrderValueArg",
          "type": "uint256"
        }
      ],
      "name": "MinOrderValueChanged",
      "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": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "LIMIT_ORDER_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accountBalance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ILimitOrderBook.OrderType",
              "name": "orderType",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "salt",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "oppositeAmountBound",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "bytes32",
              "name": "referralCode",
              "type": "bytes32"
            },
            {
              "internalType": "bool",
              "name": "reduceOnly",
              "type": "bool"
            },
            {
              "internalType": "uint80",
              "name": "roundIdWhenCreated",
              "type": "uint80"
            },
            {
              "internalType": "uint256",
              "name": "triggerPrice",
              "type": "uint256"
            }
          ],
          "internalType": "struct ILimitOrderBook.LimitOrder",
          "name": "order",
          "type": "tuple"
        }
      ],
      "name": "cancelLimitOrder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "candidate",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clearingHouse",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ILimitOrderBook.OrderType",
              "name": "orderType",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "salt",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "oppositeAmountBound",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "bytes32",
              "name": "referralCode",
              "type": "bytes32"
            },
            {
              "internalType": "bool",
              "name": "reduceOnly",
              "type": "bool"
            },
            {
              "internalType": "uint80",
              "name": "roundIdWhenCreated",
              "type": "uint80"
            },
            {
              "internalType": "uint256",
              "name": "triggerPrice",
              "type": "uint256"
            }
          ],
          "internalType": "struct ILimitOrderBook.LimitOrder",
          "name": "order",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "internalType": "uint80",
          "name": "roundIdWhenTriggered",
          "type": "uint80"
        }
      ],
      "name": "fillLimitOrder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ILimitOrderBook.OrderType",
              "name": "orderType",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "salt",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "oppositeAmountBound",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "bytes32",
              "name": "referralCode",
              "type": "bytes32"
            },
            {
              "internalType": "bool",
              "name": "reduceOnly",
              "type": "bool"
            },
            {
              "internalType": "uint80",
              "name": "roundIdWhenCreated",
              "type": "uint80"
            },
            {
              "internalType": "uint256",
              "name": "triggerPrice",
              "type": "uint256"
            }
          ],
          "internalType": "struct ILimitOrderBook.LimitOrder",
          "name": "order",
          "type": "tuple"
        }
      ],
      "name": "getOrderHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "orderHash",
          "type": "bytes32"
        }
      ],
      "name": "getOrderStatus",
      "outputs": [
        {
          "internalType": "enum ILimitOrderBook.OrderStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "clearingHouseArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "limitOrderRewardVaultArg",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minOrderValueArg",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "isWhitelistContractCaller",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "limitOrderRewardVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minOrderValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": [
        {
          "internalType": "address",
          "name": "clearingHouseArg",
          "type": "address"
        }
      ],
      "name": "setClearingHouse",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitOrderRewardVaultArg",
          "type": "address"
        }
      ],
      "name": "setLimitOrderRewardVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "minOrderValueArg",
          "type": "uint256"
        }
      ],
      "name": "setMinOrderValue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isEnabled",
          "type": "bool"
        }
      ],
      "name": "setWhitelistContractCaller",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061313f806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80635c975abb116100c357806394184a551161007c57806394184a55146102715780639e2c8ff114610284578063b0a1c1c41461028c578063bc5920ba14610294578063c9aba0aa1461029c578063e87a75ce146102af5761014d565b80635c975abb146102365780636c8381f81461023e578063715018a6146102465780638456cb591461024e5780638da5cb5b146102565780638dce3cdf1461025e5761014d565b80632f7a734f116101155780632f7a734f146101c05780633f4ba83a146101d3578063449323d8146101db57806346423aa7146101ee57806346c0cd521461020e57806354dd5f741461022e5761014d565b80630af968001461015257806313af4035146101705780631ff33f641461018557806321ef0ab81461018d578063227fe64c146101a0575b600080fd5b61015a6102c2565b6040516101679190612aab565b60405180910390f35b61018361017e36600461281b565b6102d2565b005b61015a61042d565b61018361019b366004612887565b61043d565b6101b36101ae366004612945565b610504565b6040516101679190612b77565b6101836101ce36600461281b565b610562565b610183610638565b6101836101e936600461281b565b61069f565b6102016101fc366004612887565b610843565b6040516101679190612cc4565b61022161021c36600461281b565b610859565b6040516101679190612b6c565b6101b3610878565b61022161089c565b61015a6108a5565b6101836108b4565b610183610967565b61015a6109cc565b61018361026c366004612853565b6109db565b61018361027f366004612961565b610a92565b6101b3610cb6565b61015a610cbd565b610183610ccd565b6101836102aa3660046128b7565b610dcb565b6101836102bd366004612945565b611009565b610132546001600160a01b031681565b6102da6111b8565b6001600160a01b03166102eb6109cc565b6001600160a01b03161461032f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610373576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b03828116911614156103bf576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b038281169116141561040b576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b610134546001600160a01b031681565b6104456111b8565b6001600160a01b03166104566109cc565b6001600160a01b03161461049a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b600081116104c35760405162461bcd60e51b81526004016104ba90612cd8565b60405180910390fd5b6101358190556040517f83df370fa0bae680d64cf01d88589d08bf399b7daa8bc2964ccf481c4ec1a8ac906104f9908390612b77565b60405180910390a150565b600061055a7f54ea8c184890b5a7f7321f45a2ae952f0af50e3467b2216418a683566bf57c3060001b8360405160200161053f929190612b80565b604051602081830303815290604052805190602001206111c7565b90505b919050565b61056a6111b8565b6001600160a01b031661057b6109cc565b6001600160a01b0316146105bf576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6105d1816001600160a01b0316611213565b6105ed5760405162461bcd60e51b81526004016104ba90612efc565b61013480546001600160a01b0319166001600160a01b0383169081179091556040517f0e7fb875d68d5a39eb32951485cfb755f5b8f4779a8415c517c81df791fb671a90600090a250565b6106406111b8565b6001600160a01b03166106516109cc565b6001600160a01b031614610695576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61069d611219565b565b6106a76111b8565b6001600160a01b03166106b86109cc565b6001600160a01b0316146106fc576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61070e816001600160a01b0316611213565b61072a5760405162461bcd60e51b81526004016104ba90612f64565b61013280546001600160a01b0319166001600160a01b03838116919091179182905560408051636896fabf60e01b8152905160009390921691636896fabf91600480820192602092909190829003018186803b15801561078957600080fd5b505afa15801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c19190612837565b90506107d5816001600160a01b0316611213565b6107f15760405162461bcd60e51b81526004016104ba90612d42565b61013380546001600160a01b0319166001600160a01b0383811691909117909155604051908316907fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a25050565b6000908152610131602052604090205460ff1690565b6001600160a01b03166000908152610136602052604090205460ff1690565b7f54ea8c184890b5a7f7321f45a2ae952f0af50e3467b2216418a683566bf57c3081565b60995460ff1690565b6066546001600160a01b031690565b6108bc6111b8565b6001600160a01b03166108cd6109cc565b6001600160a01b031614610911576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319908116909155606680549091169055565b61096f6111b8565b6001600160a01b03166109806109cc565b6001600160a01b0316146109c4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61069d6112b9565b6065546001600160a01b031690565b6109e36111b8565b6001600160a01b03166109f46109cc565b6001600160a01b031614610a38576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610a4a826001600160a01b0316611213565b610a665760405162461bcd60e51b81526004016104ba90612e4d565b6001600160a01b0391909116600090815261013660205260409020805460ff1916911515919091179055565b60026001541415610aea576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000610af96111b8565b9050610b0d816001600160a01b0316611213565b1580610b1d5750610b1d81610859565b610b395760405162461bcd60e51b81526004016104ba90612cfe565b6000610b45858561133c565b9150600090506000828152610131602052604090205460ff166002811115610b6957fe5b14610b865760405162461bcd60e51b81526004016104ba90612dce565b6000806000610b958887611399565b6000878152610131602052604090819020805460ff1916600117905561013454905163ac0c9cff60e01b815293965091945092506001600160a01b03169063ac0c9cff90610be99088908890600401612ad9565b602060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3b919061289f565b5087606001516001600160a01b031688604001516001600160a01b03167fe80b129e07753ff6150d24843064a85193a9698c16a99ae31e84433cef76a1b8868b600001516003811115610c8a57fe5b89888888604051610ca096959493929190612c72565b60405180910390a3505060018055505050505050565b6101355481565b610133546001600160a01b031681565b6066546001600160a01b0316610d12576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610d1a6111b8565b6066546001600160a01b03908116911614610d65576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff1680610de45750610de4611631565b80610df2575060005460ff16155b610e2d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015610e58576000805460ff1961ff0019909116610100171660011790555b610e60611642565b610e686116ec565b610e728686611789565b610e84846001600160a01b0316611213565b610ea05760405162461bcd60e51b81526004016104ba90612f64565b61013280546001600160a01b0319166001600160a01b03868116919091179182905560408051636896fabf60e01b8152905160009390921691636896fabf91600480820192602092909190829003018186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190612837565b9050610f4b816001600160a01b0316611213565b610f675760405162461bcd60e51b81526004016104ba90612d42565b61013380546001600160a01b0319166001600160a01b0383811691909117909155610f93908516611213565b610faf5760405162461bcd60e51b81526004016104ba90612efc565b61013480546001600160a01b0319166001600160a01b03861617905582610fe85760405162461bcd60e51b81526004016104ba90612cd8565b506101358290558015611001576000805461ff00191690555b505050505050565b80604001516001600160a01b031661101f6111b8565b6001600160a01b0316146110455760405162461bcd60e51b81526004016104ba90612f87565b600061105082610504565b9050600080828152610131602052604090205460ff16600281111561107157fe5b1461108e5760405162461bcd60e51b81526004016104ba90612dce565b600081815261013160205260408120805460ff191660021790556080830151819015611105578360a00151156110e1576110cb8460c00151611837565b91506110da8460e0015161184b565b9050611100565b6110ee8460e00151611837565b91506110fd8460c0015161184b565b90505b61114a565b8360a001511561112b5761111c8460e0015161184b565b91506110fd8460c00151611837565b6111388460c0015161184b565b91506111478460e00151611837565b90505b83606001516001600160a01b031684604001516001600160a01b03167f1385c5527f087ff7303436adac89188a5a3ff2ba867e6f744658baad06ee430e858760000151600381111561119857fe5b86866040516111aa9493929190612ca6565b60405180910390a350505050565b60006111c2611897565b905090565b60006111d161189b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b3b151590565b61122161089c565b611269576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61129c6111b8565b604080516001600160a01b039092168252519081900360200190a1565b6112c161089c565b15611306576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861129c6111b8565b600080600061134a85610504565b9050600061135882866118d6565b905085604001516001600160a01b0316816001600160a01b03161461138f5760405162461bcd60e51b81526004016104ba90612e6e565b9590945092505050565b60008060006113a88585611958565b610133546040808701516060880151915163165c4e2960e31b81526000936001600160a01b03169263b2e27148926113e592909190600401612abf565b60206040518083038186803b1580156113fd57600080fd5b505afa158015611411573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611435919061289f565b9050600080600061013260009054906101000a90046001600160a01b03166001600160a01b031662c2473e8a604001516040518061010001604052808d606001516001600160a01b031681526020018d60800151151581526020018d60a00151151581526020018d60c0015181526020018d60e0015181526020018d610100015181526020018d61012001516001600160a01b031681526020018d61014001518152506040518363ffffffff1660e01b81526004016114f5929190612af2565b606060405180830381600087803b15801561150f57600080fd5b505af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154791906129d8565b925092509250610135548210156115705760405162461bcd60e51b81526004016104ba90612d20565b886101600151156115c35783158015906115935750608089015115156000851214155b80156115a757506115a384611af1565b8311155b6115c35760405162461bcd60e51b81526004016104ba90612d8b565b6000808a60800151156115fd576115d985611837565b91506115f66115e78461184b565b6115f08661184b565b90611b1a565b9050611620565b6116068561184b565b915061161d6116148461184b565b6115f086611837565b90505b909750955093505050509250925092565b600061163c30611213565b15905090565b600054610100900460ff168061165b575061165b611631565b80611669575060005460ff16155b6116a45760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff161580156116cf576000805460ff1961ff0019909116610100171660011790555b6116d7611b86565b80156116e9576000805461ff00191690555b50565b600054610100900460ff16806117055750611705611631565b80611713575060005460ff16155b61174e5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611779576000805460ff1961ff0019909116610100171660011790555b611781611c2b565b6116d7611d2c565b600054610100900460ff16806117a257506117a2611631565b806117b0575060005460ff16155b6117eb5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611816576000805460ff1961ff0019909116610100171660011790555b6118208383611dc9565b8015611832576000805461ff00191690555b505050565b60006118428261184b565b60000392915050565b60006001600160ff1b038211156118935760405162461bcd60e51b81526004018080602001828103825260288152602001806130e26028913960400191505060405180910390fd5b5090565b3390565b60006111c27f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6118c9611e89565b6118d1611e8f565b611e95565b6000815160411461192e576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61194c86828585611ef7565b93505050505b92915050565b60008251600381111561196757fe5b148061197f575060038251600381111561197d57fe5b145b1561198957611aed565b60008261018001516001600160501b03161180156119be57508161018001516001600160501b0316816001600160501b031610155b6119da5760405162461bcd60e51b81526004016104ba90612faa565b6000826101a00151116119ff5760405162461bcd60e51b81526004016104ba90612f43565b6000611a0f836060015183612075565b9050600183516003811115611a2057fe5b1415611a8457826080015115611a5a57826101a00151811115611a555760405162461bcd60e51b81526004016104ba90612df0565b611a7f565b826101a00151811015611a7f5760405162461bcd60e51b81526004016104ba90612d65565b611832565b600283516003811115611a9357fe5b141561183257826080015115611ac857826101a00151811015611a7f5760405162461bcd60e51b81526004016104ba90612eb6565b826101a001518111156118325760405162461bcd60e51b81526004016104ba90612e90565b5050565b600080821215611b1157611b0c611b0783612323565b61234f565b61055a565b61055a8261234f565b6000828201818312801590611b2f5750838112155b80611b445750600083128015611b4457508381125b611b7f5760405162461bcd60e51b815260040180806020018281038252602181526020018061302e6021913960400191505060405180910390fd5b9392505050565b600054610100900460ff1680611b9f5750611b9f611631565b80611bad575060005460ff16155b611be85760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611c13576000805460ff1961ff0019909116610100171660011790555b6001805580156116e9576000805461ff001916905550565b600054610100900460ff1680611c445750611c44611631565b80611c52575060005460ff16155b611c8d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611cb8576000805460ff1961ff0019909116610100171660011790555b611cc06123a6565b6000611cca6111b8565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156116e9576000805461ff001916905550565b600054610100900460ff1680611d455750611d45611631565b80611d53575060005460ff16155b611d8e5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611db9576000805460ff1961ff0019909116610100171660011790555b611dc1612437565b6116d76124d7565b600054610100900460ff1680611de25750611de2611631565b80611df0575060005460ff16155b611e2b5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611e56576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060fd9190915560fe558015611832576000805461ff0019169055505050565b60fd5490565b60fe5490565b6000838383611ea2612582565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f585760405162461bcd60e51b815260040180806020018281038252602281526020018061304f6022913960400191505060405180910390fd5b8360ff16601b1480611f6d57508360ff16601c145b611fa85760405162461bcd60e51b815260040180806020018281038252602281526020018061309f6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612004573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661206c576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600080836001600160a01b0316639e87a5cd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120b157600080fd5b505afa1580156120c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e99190612837565b90506000816001600160a01b03166382b4ad166040518163ffffffff1660e01b815260040160206040518083038186803b15801561212657600080fd5b505afa15801561213a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215e9190612837565b90506000816001600160a01b0316633ad59dbc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561219b57600080fd5b505afa1580156121af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d39190612837565b9050600080826001600160a01b0316639a6fc8f5886040518263ffffffff1660e01b81526004016122049190612fcb565b60a06040518083038186803b15801561221c57600080fd5b505afa158015612230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122549190612a05565b509350509250506000821361227b5760405162461bcd60e51b81526004016104ba90612dae565b6000811161229b5760405162461bcd60e51b81526004016104ba90612f21565b61231782856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d857600080fd5b505afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123109190612a5c565b6012612586565b98975050505050505050565b6000600160ff1b82136123485760405162461bcd60e51b81526004016104ba90612e16565b5060000390565b600080821215611893576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b600054610100900460ff16806123bf57506123bf611631565b806123cd575060005460ff16155b6124085760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015612433576000805460ff1961ff0019909116610100171660011790555b6116d75b600054610100900460ff16806124505750612450611631565b8061245e575060005460ff16155b6124995760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff161580156116d7576000805460ff1961ff00199091166101001716600117905580156116e9576000805461ff001916905550565b600054610100900460ff16806124f057506124f0611631565b806124fe575060005460ff16155b6125395760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015612564576000805460ff1961ff0019909116610100171660011790555b6099805460ff1916905580156116e9576000805461ff001916905550565b4690565b60008160ff168360ff1611156125ae5760405162461bcd60e51b81526004016104ba90612edc565b6125cb6125c160ff8481169086166125d3565b8590600a0a612630565b949350505050565b60008282111561262a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261263f57506000611952565b8282028284828161264c57fe5b0414611b7f5760405162461bcd60e51b81526004018080602001828103825260218152602001806130c16021913960400191505060405180910390fd5b600067ffffffffffffffff83111561269d57fe5b6126b0601f8401601f1916602001612fdf565b90508281528383830111156126c457600080fd5b828260208301376000602084830101529392505050565b803561055d81613003565b8035801515811461055d57600080fd5b80356004811061055d57600080fd5b600082601f830112612715578081fd5b611b7f83833560208501612689565b60006101c0808385031215612737578182fd5b61274081612fdf565b91505061274c826126f6565b815260208201356020820152612764604083016126db565b6040820152612775606083016126db565b6060820152612786608083016126e6565b608082015261279760a083016126e6565b60a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206127ca8184016126db565b9082015261014082810135908201526101606127e78184016126e6565b908201526101806127f9838201612810565b81830152506101a080830135818301525092915050565b803561055d81613018565b60006020828403121561282c578081fd5b8135611b7f81613003565b600060208284031215612848578081fd5b8151611b7f81613003565b60008060408385031215612865578081fd5b823561287081613003565b915061287e602084016126e6565b90509250929050565b600060208284031215612898578081fd5b5035919050565b6000602082840312156128b0578081fd5b5051919050565b600080600080600060a086880312156128ce578081fd5b853567ffffffffffffffff808211156128e5578283fd5b6128f189838a01612705565b96506020880135915080821115612906578283fd5b5061291388828901612705565b945050604086013561292481613003565b9250606086013561293481613003565b949793965091946080013592915050565b60006101c08284031215612957578081fd5b611b7f8383612724565b60008060006102008486031215612976578081fd5b6129808585612724565b92506101c084013567ffffffffffffffff81111561299c578182fd5b8401601f810186136129ac578182fd5b6129bb86823560208401612689565b9250506101e08401356129cd81613018565b809150509250925092565b6000806000606084860312156129ec578081fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612a1c578283fd5b8551612a2781613018565b809550506020860151935060408601519250606086015191506080860151612a4e81613018565b809150509295509295909350565b600060208284031215612a6d578081fd5b815160ff81168114611b7f578182fd5b6001600160a01b03169052565b15159052565b60048110612a9a57fe5b9052565b6001600160501b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b60006101208201905060018060a01b0380851683528084511660208401525060208301511515604083015260408301511515606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612b5960e0840182612a7d565b5060e08301516101008301529392505050565b901515815260200190565b90815260200190565b60006101e082019050838252612b9a602083018451612a90565b602083015160408301526040830151612bb66060840182612a7d565b506060830151612bc96080840182612a7d565b506080830151612bdc60a0840182612a8a565b5060a0830151612bef60c0840182612a8a565b5060c083015160e0838101919091528301516101008084019190915283015161012080840191909152830151610140612c2a81850183612a7d565b840151610160848101919091528401519050610180612c4b81850183612a8a565b84015190506101a0612c5f84820183612a9e565b808501516101c085015250509392505050565b95865260ff9490941660208601526001600160a01b039290921660408501526060840152608083015260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6020810160038310612cd257fe5b91905290565b6020808252600c908201526b04c4f425f4d4f564d424754360a41b604082015260600190565b6020808252600890820152674c4f425f534d424560c01b604082015260600190565b6020808252600890820152674c4f425f4f56545360c01b604082015260600190565b6020808252600990820152684c4f425f4142494e4360b81b604082015260600190565b6020808252600c908201526b4c4f425f42534c4f54504e4d60a01b604082015260600190565b6020808252600990820152684c4f425f524f494e5360b81b604082015260600190565b60208082526006908201526504350465f49560d41b604082015260600190565b6020808252600890820152674c4f425f4f4d425560c01b604082015260600190565b6020808252600c908201526b4c4f425f53534c4f54504e4d60a01b604082015260600190565b6020808252601c908201527f506572704d6174683a20696e76657273696f6e206f766572666c6f7700000000604082015260600190565b6020808252600790820152664c4f425f4e434160c81b604082015260600190565b6020808252600890820152671313d097d4d2539560c21b604082015260600190565b6020808252600c908201526b4c4f425f42544c4f54504e4d60a01b604082015260600190565b6020808252600c908201526b4c4f425f53544c4f54504e4d60a01b604082015260600190565b6020808252600690820152651313d097d25160d21b604082015260600190565b6020808252600b908201526a4c4f425f4c4f4656494e4360a81b604082015260600190565b6020808252600890820152674350465f52494e4360c01b604082015260600190565b60208082526007908201526604c4f425f4954560cc1b604082015260600190565b6020808252600990820152684c4f425f4348494e4360b81b604082015260600190565b6020808252600990820152684c4f425f4f534d425360b81b604082015260600190565b6020808252600790820152664c4f425f49524960c81b604082015260600190565b6001600160501b0391909116815260200190565b60405181810167ffffffffffffffff81118282101715612ffb57fe5b604052919050565b6001600160a01b03811681146116e957600080fd5b6001600160501b03811681146116e957600080fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f7745434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e74323536a2646970667358221220185569ca1a3a2837ccf3de1b258035683bff78cfbb2602ecbf65fca0be65dca864736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80635c975abb116100c357806394184a551161007c57806394184a55146102715780639e2c8ff114610284578063b0a1c1c41461028c578063bc5920ba14610294578063c9aba0aa1461029c578063e87a75ce146102af5761014d565b80635c975abb146102365780636c8381f81461023e578063715018a6146102465780638456cb591461024e5780638da5cb5b146102565780638dce3cdf1461025e5761014d565b80632f7a734f116101155780632f7a734f146101c05780633f4ba83a146101d3578063449323d8146101db57806346423aa7146101ee57806346c0cd521461020e57806354dd5f741461022e5761014d565b80630af968001461015257806313af4035146101705780631ff33f641461018557806321ef0ab81461018d578063227fe64c146101a0575b600080fd5b61015a6102c2565b6040516101679190612aab565b60405180910390f35b61018361017e36600461281b565b6102d2565b005b61015a61042d565b61018361019b366004612887565b61043d565b6101b36101ae366004612945565b610504565b6040516101679190612b77565b6101836101ce36600461281b565b610562565b610183610638565b6101836101e936600461281b565b61069f565b6102016101fc366004612887565b610843565b6040516101679190612cc4565b61022161021c36600461281b565b610859565b6040516101679190612b6c565b6101b3610878565b61022161089c565b61015a6108a5565b6101836108b4565b610183610967565b61015a6109cc565b61018361026c366004612853565b6109db565b61018361027f366004612961565b610a92565b6101b3610cb6565b61015a610cbd565b610183610ccd565b6101836102aa3660046128b7565b610dcb565b6101836102bd366004612945565b611009565b610132546001600160a01b031681565b6102da6111b8565b6001600160a01b03166102eb6109cc565b6001600160a01b03161461032f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610373576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b03828116911614156103bf576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b038281169116141561040b576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b610134546001600160a01b031681565b6104456111b8565b6001600160a01b03166104566109cc565b6001600160a01b03161461049a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b600081116104c35760405162461bcd60e51b81526004016104ba90612cd8565b60405180910390fd5b6101358190556040517f83df370fa0bae680d64cf01d88589d08bf399b7daa8bc2964ccf481c4ec1a8ac906104f9908390612b77565b60405180910390a150565b600061055a7f54ea8c184890b5a7f7321f45a2ae952f0af50e3467b2216418a683566bf57c3060001b8360405160200161053f929190612b80565b604051602081830303815290604052805190602001206111c7565b90505b919050565b61056a6111b8565b6001600160a01b031661057b6109cc565b6001600160a01b0316146105bf576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6105d1816001600160a01b0316611213565b6105ed5760405162461bcd60e51b81526004016104ba90612efc565b61013480546001600160a01b0319166001600160a01b0383169081179091556040517f0e7fb875d68d5a39eb32951485cfb755f5b8f4779a8415c517c81df791fb671a90600090a250565b6106406111b8565b6001600160a01b03166106516109cc565b6001600160a01b031614610695576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61069d611219565b565b6106a76111b8565b6001600160a01b03166106b86109cc565b6001600160a01b0316146106fc576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61070e816001600160a01b0316611213565b61072a5760405162461bcd60e51b81526004016104ba90612f64565b61013280546001600160a01b0319166001600160a01b03838116919091179182905560408051636896fabf60e01b8152905160009390921691636896fabf91600480820192602092909190829003018186803b15801561078957600080fd5b505afa15801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c19190612837565b90506107d5816001600160a01b0316611213565b6107f15760405162461bcd60e51b81526004016104ba90612d42565b61013380546001600160a01b0319166001600160a01b0383811691909117909155604051908316907fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a25050565b6000908152610131602052604090205460ff1690565b6001600160a01b03166000908152610136602052604090205460ff1690565b7f54ea8c184890b5a7f7321f45a2ae952f0af50e3467b2216418a683566bf57c3081565b60995460ff1690565b6066546001600160a01b031690565b6108bc6111b8565b6001600160a01b03166108cd6109cc565b6001600160a01b031614610911576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319908116909155606680549091169055565b61096f6111b8565b6001600160a01b03166109806109cc565b6001600160a01b0316146109c4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61069d6112b9565b6065546001600160a01b031690565b6109e36111b8565b6001600160a01b03166109f46109cc565b6001600160a01b031614610a38576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610a4a826001600160a01b0316611213565b610a665760405162461bcd60e51b81526004016104ba90612e4d565b6001600160a01b0391909116600090815261013660205260409020805460ff1916911515919091179055565b60026001541415610aea576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000610af96111b8565b9050610b0d816001600160a01b0316611213565b1580610b1d5750610b1d81610859565b610b395760405162461bcd60e51b81526004016104ba90612cfe565b6000610b45858561133c565b9150600090506000828152610131602052604090205460ff166002811115610b6957fe5b14610b865760405162461bcd60e51b81526004016104ba90612dce565b6000806000610b958887611399565b6000878152610131602052604090819020805460ff1916600117905561013454905163ac0c9cff60e01b815293965091945092506001600160a01b03169063ac0c9cff90610be99088908890600401612ad9565b602060405180830381600087803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3b919061289f565b5087606001516001600160a01b031688604001516001600160a01b03167fe80b129e07753ff6150d24843064a85193a9698c16a99ae31e84433cef76a1b8868b600001516003811115610c8a57fe5b89888888604051610ca096959493929190612c72565b60405180910390a3505060018055505050505050565b6101355481565b610133546001600160a01b031681565b6066546001600160a01b0316610d12576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610d1a6111b8565b6066546001600160a01b03908116911614610d65576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff1680610de45750610de4611631565b80610df2575060005460ff16155b610e2d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015610e58576000805460ff1961ff0019909116610100171660011790555b610e60611642565b610e686116ec565b610e728686611789565b610e84846001600160a01b0316611213565b610ea05760405162461bcd60e51b81526004016104ba90612f64565b61013280546001600160a01b0319166001600160a01b03868116919091179182905560408051636896fabf60e01b8152905160009390921691636896fabf91600480820192602092909190829003018186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190612837565b9050610f4b816001600160a01b0316611213565b610f675760405162461bcd60e51b81526004016104ba90612d42565b61013380546001600160a01b0319166001600160a01b0383811691909117909155610f93908516611213565b610faf5760405162461bcd60e51b81526004016104ba90612efc565b61013480546001600160a01b0319166001600160a01b03861617905582610fe85760405162461bcd60e51b81526004016104ba90612cd8565b506101358290558015611001576000805461ff00191690555b505050505050565b80604001516001600160a01b031661101f6111b8565b6001600160a01b0316146110455760405162461bcd60e51b81526004016104ba90612f87565b600061105082610504565b9050600080828152610131602052604090205460ff16600281111561107157fe5b1461108e5760405162461bcd60e51b81526004016104ba90612dce565b600081815261013160205260408120805460ff191660021790556080830151819015611105578360a00151156110e1576110cb8460c00151611837565b91506110da8460e0015161184b565b9050611100565b6110ee8460e00151611837565b91506110fd8460c0015161184b565b90505b61114a565b8360a001511561112b5761111c8460e0015161184b565b91506110fd8460c00151611837565b6111388460c0015161184b565b91506111478460e00151611837565b90505b83606001516001600160a01b031684604001516001600160a01b03167f1385c5527f087ff7303436adac89188a5a3ff2ba867e6f744658baad06ee430e858760000151600381111561119857fe5b86866040516111aa9493929190612ca6565b60405180910390a350505050565b60006111c2611897565b905090565b60006111d161189b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b3b151590565b61122161089c565b611269576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61129c6111b8565b604080516001600160a01b039092168252519081900360200190a1565b6112c161089c565b15611306576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861129c6111b8565b600080600061134a85610504565b9050600061135882866118d6565b905085604001516001600160a01b0316816001600160a01b03161461138f5760405162461bcd60e51b81526004016104ba90612e6e565b9590945092505050565b60008060006113a88585611958565b610133546040808701516060880151915163165c4e2960e31b81526000936001600160a01b03169263b2e27148926113e592909190600401612abf565b60206040518083038186803b1580156113fd57600080fd5b505afa158015611411573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611435919061289f565b9050600080600061013260009054906101000a90046001600160a01b03166001600160a01b031662c2473e8a604001516040518061010001604052808d606001516001600160a01b031681526020018d60800151151581526020018d60a00151151581526020018d60c0015181526020018d60e0015181526020018d610100015181526020018d61012001516001600160a01b031681526020018d61014001518152506040518363ffffffff1660e01b81526004016114f5929190612af2565b606060405180830381600087803b15801561150f57600080fd5b505af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154791906129d8565b925092509250610135548210156115705760405162461bcd60e51b81526004016104ba90612d20565b886101600151156115c35783158015906115935750608089015115156000851214155b80156115a757506115a384611af1565b8311155b6115c35760405162461bcd60e51b81526004016104ba90612d8b565b6000808a60800151156115fd576115d985611837565b91506115f66115e78461184b565b6115f08661184b565b90611b1a565b9050611620565b6116068561184b565b915061161d6116148461184b565b6115f086611837565b90505b909750955093505050509250925092565b600061163c30611213565b15905090565b600054610100900460ff168061165b575061165b611631565b80611669575060005460ff16155b6116a45760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff161580156116cf576000805460ff1961ff0019909116610100171660011790555b6116d7611b86565b80156116e9576000805461ff00191690555b50565b600054610100900460ff16806117055750611705611631565b80611713575060005460ff16155b61174e5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611779576000805460ff1961ff0019909116610100171660011790555b611781611c2b565b6116d7611d2c565b600054610100900460ff16806117a257506117a2611631565b806117b0575060005460ff16155b6117eb5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611816576000805460ff1961ff0019909116610100171660011790555b6118208383611dc9565b8015611832576000805461ff00191690555b505050565b60006118428261184b565b60000392915050565b60006001600160ff1b038211156118935760405162461bcd60e51b81526004018080602001828103825260288152602001806130e26028913960400191505060405180910390fd5b5090565b3390565b60006111c27f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6118c9611e89565b6118d1611e8f565b611e95565b6000815160411461192e576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61194c86828585611ef7565b93505050505b92915050565b60008251600381111561196757fe5b148061197f575060038251600381111561197d57fe5b145b1561198957611aed565b60008261018001516001600160501b03161180156119be57508161018001516001600160501b0316816001600160501b031610155b6119da5760405162461bcd60e51b81526004016104ba90612faa565b6000826101a00151116119ff5760405162461bcd60e51b81526004016104ba90612f43565b6000611a0f836060015183612075565b9050600183516003811115611a2057fe5b1415611a8457826080015115611a5a57826101a00151811115611a555760405162461bcd60e51b81526004016104ba90612df0565b611a7f565b826101a00151811015611a7f5760405162461bcd60e51b81526004016104ba90612d65565b611832565b600283516003811115611a9357fe5b141561183257826080015115611ac857826101a00151811015611a7f5760405162461bcd60e51b81526004016104ba90612eb6565b826101a001518111156118325760405162461bcd60e51b81526004016104ba90612e90565b5050565b600080821215611b1157611b0c611b0783612323565b61234f565b61055a565b61055a8261234f565b6000828201818312801590611b2f5750838112155b80611b445750600083128015611b4457508381125b611b7f5760405162461bcd60e51b815260040180806020018281038252602181526020018061302e6021913960400191505060405180910390fd5b9392505050565b600054610100900460ff1680611b9f5750611b9f611631565b80611bad575060005460ff16155b611be85760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611c13576000805460ff1961ff0019909116610100171660011790555b6001805580156116e9576000805461ff001916905550565b600054610100900460ff1680611c445750611c44611631565b80611c52575060005460ff16155b611c8d5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611cb8576000805460ff1961ff0019909116610100171660011790555b611cc06123a6565b6000611cca6111b8565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156116e9576000805461ff001916905550565b600054610100900460ff1680611d455750611d45611631565b80611d53575060005460ff16155b611d8e5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611db9576000805460ff1961ff0019909116610100171660011790555b611dc1612437565b6116d76124d7565b600054610100900460ff1680611de25750611de2611631565b80611df0575060005460ff16155b611e2b5760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015611e56576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060fd9190915560fe558015611832576000805461ff0019169055505050565b60fd5490565b60fe5490565b6000838383611ea2612582565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f585760405162461bcd60e51b815260040180806020018281038252602281526020018061304f6022913960400191505060405180910390fd5b8360ff16601b1480611f6d57508360ff16601c145b611fa85760405162461bcd60e51b815260040180806020018281038252602281526020018061309f6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612004573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661206c576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600080836001600160a01b0316639e87a5cd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120b157600080fd5b505afa1580156120c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e99190612837565b90506000816001600160a01b03166382b4ad166040518163ffffffff1660e01b815260040160206040518083038186803b15801561212657600080fd5b505afa15801561213a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215e9190612837565b90506000816001600160a01b0316633ad59dbc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561219b57600080fd5b505afa1580156121af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d39190612837565b9050600080826001600160a01b0316639a6fc8f5886040518263ffffffff1660e01b81526004016122049190612fcb565b60a06040518083038186803b15801561221c57600080fd5b505afa158015612230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122549190612a05565b509350509250506000821361227b5760405162461bcd60e51b81526004016104ba90612dae565b6000811161229b5760405162461bcd60e51b81526004016104ba90612f21565b61231782856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d857600080fd5b505afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123109190612a5c565b6012612586565b98975050505050505050565b6000600160ff1b82136123485760405162461bcd60e51b81526004016104ba90612e16565b5060000390565b600080821215611893576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b600054610100900460ff16806123bf57506123bf611631565b806123cd575060005460ff16155b6124085760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015612433576000805460ff1961ff0019909116610100171660011790555b6116d75b600054610100900460ff16806124505750612450611631565b8061245e575060005460ff16155b6124995760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff161580156116d7576000805460ff1961ff00199091166101001716600117905580156116e9576000805461ff001916905550565b600054610100900460ff16806124f057506124f0611631565b806124fe575060005460ff16155b6125395760405162461bcd60e51b815260040180806020018281038252602e815260200180613071602e913960400191505060405180910390fd5b600054610100900460ff16158015612564576000805460ff1961ff0019909116610100171660011790555b6099805460ff1916905580156116e9576000805461ff001916905550565b4690565b60008160ff168360ff1611156125ae5760405162461bcd60e51b81526004016104ba90612edc565b6125cb6125c160ff8481169086166125d3565b8590600a0a612630565b949350505050565b60008282111561262a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261263f57506000611952565b8282028284828161264c57fe5b0414611b7f5760405162461bcd60e51b81526004018080602001828103825260218152602001806130c16021913960400191505060405180910390fd5b600067ffffffffffffffff83111561269d57fe5b6126b0601f8401601f1916602001612fdf565b90508281528383830111156126c457600080fd5b828260208301376000602084830101529392505050565b803561055d81613003565b8035801515811461055d57600080fd5b80356004811061055d57600080fd5b600082601f830112612715578081fd5b611b7f83833560208501612689565b60006101c0808385031215612737578182fd5b61274081612fdf565b91505061274c826126f6565b815260208201356020820152612764604083016126db565b6040820152612775606083016126db565b6060820152612786608083016126e6565b608082015261279760a083016126e6565b60a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206127ca8184016126db565b9082015261014082810135908201526101606127e78184016126e6565b908201526101806127f9838201612810565b81830152506101a080830135818301525092915050565b803561055d81613018565b60006020828403121561282c578081fd5b8135611b7f81613003565b600060208284031215612848578081fd5b8151611b7f81613003565b60008060408385031215612865578081fd5b823561287081613003565b915061287e602084016126e6565b90509250929050565b600060208284031215612898578081fd5b5035919050565b6000602082840312156128b0578081fd5b5051919050565b600080600080600060a086880312156128ce578081fd5b853567ffffffffffffffff808211156128e5578283fd5b6128f189838a01612705565b96506020880135915080821115612906578283fd5b5061291388828901612705565b945050604086013561292481613003565b9250606086013561293481613003565b949793965091946080013592915050565b60006101c08284031215612957578081fd5b611b7f8383612724565b60008060006102008486031215612976578081fd5b6129808585612724565b92506101c084013567ffffffffffffffff81111561299c578182fd5b8401601f810186136129ac578182fd5b6129bb86823560208401612689565b9250506101e08401356129cd81613018565b809150509250925092565b6000806000606084860312156129ec578081fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612a1c578283fd5b8551612a2781613018565b809550506020860151935060408601519250606086015191506080860151612a4e81613018565b809150509295509295909350565b600060208284031215612a6d578081fd5b815160ff81168114611b7f578182fd5b6001600160a01b03169052565b15159052565b60048110612a9a57fe5b9052565b6001600160501b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b60006101208201905060018060a01b0380851683528084511660208401525060208301511515604083015260408301511515606083015260608301516080830152608083015160a083015260a083015160c083015260c0830151612b5960e0840182612a7d565b5060e08301516101008301529392505050565b901515815260200190565b90815260200190565b60006101e082019050838252612b9a602083018451612a90565b602083015160408301526040830151612bb66060840182612a7d565b506060830151612bc96080840182612a7d565b506080830151612bdc60a0840182612a8a565b5060a0830151612bef60c0840182612a8a565b5060c083015160e0838101919091528301516101008084019190915283015161012080840191909152830151610140612c2a81850183612a7d565b840151610160848101919091528401519050610180612c4b81850183612a8a565b84015190506101a0612c5f84820183612a9e565b808501516101c085015250509392505050565b95865260ff9490941660208601526001600160a01b039290921660408501526060840152608083015260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6020810160038310612cd257fe5b91905290565b6020808252600c908201526b04c4f425f4d4f564d424754360a41b604082015260600190565b6020808252600890820152674c4f425f534d424560c01b604082015260600190565b6020808252600890820152674c4f425f4f56545360c01b604082015260600190565b6020808252600990820152684c4f425f4142494e4360b81b604082015260600190565b6020808252600c908201526b4c4f425f42534c4f54504e4d60a01b604082015260600190565b6020808252600990820152684c4f425f524f494e5360b81b604082015260600190565b60208082526006908201526504350465f49560d41b604082015260600190565b6020808252600890820152674c4f425f4f4d425560c01b604082015260600190565b6020808252600c908201526b4c4f425f53534c4f54504e4d60a01b604082015260600190565b6020808252601c908201527f506572704d6174683a20696e76657273696f6e206f766572666c6f7700000000604082015260600190565b6020808252600790820152664c4f425f4e434160c81b604082015260600190565b6020808252600890820152671313d097d4d2539560c21b604082015260600190565b6020808252600c908201526b4c4f425f42544c4f54504e4d60a01b604082015260600190565b6020808252600c908201526b4c4f425f53544c4f54504e4d60a01b604082015260600190565b6020808252600690820152651313d097d25160d21b604082015260600190565b6020808252600b908201526a4c4f425f4c4f4656494e4360a81b604082015260600190565b6020808252600890820152674350465f52494e4360c01b604082015260600190565b60208082526007908201526604c4f425f4954560cc1b604082015260600190565b6020808252600990820152684c4f425f4348494e4360b81b604082015260600190565b6020808252600990820152684c4f425f4f534d425360b81b604082015260600190565b6020808252600790820152664c4f425f49524960c81b604082015260600190565b6001600160501b0391909116815260200190565b60405181810167ffffffffffffffff81118282101715612ffb57fe5b604052919050565b6001600160a01b03811681146116e957600080fd5b6001600160501b03811681146116e957600080fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f7745434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e74323536a2646970667358221220185569ca1a3a2837ccf3de1b258035683bff78cfbb2602ecbf65fca0be65dca864736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
