{
  "_format": "hh-sol-artifact-1",
  "contractName": "ThreePieceWiseLinearFeeCurve",
  "sourceName": "contracts/PriceCurves/ThreePieceWiseLinearPriceCurve.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "controllerAddress",
          "type": "address"
        }
      ],
      "name": "AddressesSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousDecayTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decayTime",
          "type": "uint256"
        }
      ],
      "name": "DecayTimeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousDollarCap",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "dollarCap",
          "type": "uint256"
        }
      ],
      "name": "DollarCapSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousLastFeePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousLastFeeTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lastFeePercent",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lastFeeTime",
          "type": "uint256"
        }
      ],
      "name": "FeeCapAndTimeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "m1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "b1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "m2",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cutoff1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "m3",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cutoff2",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "dollarCap",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decayTime",
          "type": "uint256"
        }
      ],
      "name": "ParamsAdjusted",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_m1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_b1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_m2",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cutoff1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_m3",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cutoff2",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_dollarCap",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_decayTime",
          "type": "uint256"
        }
      ],
      "name": "adjustParams",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b2Negative",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b3",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b3Negative",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "calculateDecayedFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controllerAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cutoff1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cutoff2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decayTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dollarCap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_collateralVCInput",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalCollateralVCBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePre",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePost",
          "type": "uint256"
        }
      ],
      "name": "getFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "feeCalculated",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_collateralVCInput",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalCollateralVCBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePre",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalVCBalancePost",
          "type": "uint256"
        }
      ],
      "name": "getFeeAndUpdate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "feeCalculated",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFeeCapAndTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_controllerAddress",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastFeePercent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastFeeTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "m1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "m2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "m3",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paramsInitialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_decayTime",
          "type": "uint256"
        }
      ],
      "name": "setDecayTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_dollarCap",
          "type": "uint256"
        }
      ],
      "name": "setDollarCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_lastFeePercent",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_lastFeeTime",
          "type": "uint256"
        }
      ],
      "name": "setFeeCapAndTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506113be806100206000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063a0230b4f11610104578063ce405095116100a2578063e9b6190911610071578063e9b6190914610385578063ee4950021461038e578063f2cfd55114610397578063f2fde38b146103b257600080fd5b8063ce40509514610358578063d26e6aa414610361578063d33fa1fe14610369578063e98f61761461037257600080fd5b8063a77f92ff116100de578063a77f92ff14610320578063b34b408e14610329578063be1420231461033c578063c4d66de81461034557600080fd5b8063a0230b4f146102fa578063a0716db514610303578063a5bef6d81461031757600080fd5b80634b24ea471161017c57806373ddaef41161014b57806373ddaef4146102ba5780638da5cb5b146102cd57806391aa69ca146102de57806397498845146102e757600080fd5b80634b24ea47146102715780635de322e31461029c57806366b5ae1f146102a9578063715018a6146102b257600080fd5b8063158ef93e116101b8578063158ef93e146102295780632bf838c3146102485780632c3609a0146102515780633ab2fb2b1461026457600080fd5b806306fdde03146101df5780630add6ef2146101fd57806311cfe6a914610214575b600080fd5b6101e76103c5565b6040516101f49190610fc5565b60405180910390f35b610206606a5481565b6040519081526020016101f4565b610227610222366004610fd8565b610453565b005b6074546001600160a01b031615155b60405190151581526020016101f4565b610206606c5481565b61022761025f366004610ff1565b61049c565b606f546102389060ff1681565b607454610284906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b606b546102389060ff1681565b61020660715481565b610227610554565b6102066102c8366004611013565b610568565b6033546001600160a01b0316610284565b61020660695481565b6102276102f5366004610fd8565b61057f565b610206606d5481565b60745461023890600160a01b900460ff1681565b61020660735481565b61020660665481565b61022761033736600461105b565b6105c8565b61020660725481565b61022761035336600461114d565b61087d565b61020660685481565b6102066109fc565b61020660705481565b610206610380366004611013565b610a50565b610206606e5481565b61020660675481565b607254607154604080519283526020830191909152016101f4565b6102276103c036600461114d565b610acb565b606580546103d290611176565b80601f01602080910402602001604051908101604052809291908181526020018280546103fe90611176565b801561044b5780601f106104205761010080835404028352916020019161044b565b820191906000526020600020905b81548152906001019060200180831161042e57829003601f168201915b505050505081565b61045b610b5b565b60735460408051918252602082018390527f24399c5dc569ae6a84e4f1f5b920be8287c6b4641798200e4a061c7f0e5f104d910160405180910390a1607355565b6074546001600160a01b031633146104fb5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520636f6e74726f6c6c65720000000000000060448201526064015b60405180910390fd5b6072546071546040805192835260208301919091528101839052606081018290527f46260e4b1cf55abf72e8979ac735bccbb337ae91602223beefa84e215677d4a69060800160405180910390a1607291909155607155565b61055c610b5b565b6105666000610bb5565b565b600061057685858585610c14565b95945050505050565b610587610b5b565b60705460408051918252602082018390527f174b6c5c9fb671a22fef882eb99be5ffda98949070adf83534f2ab1846078b85910160405180910390a1607055565b6105d0610b5b565b828511156106205760405162461bcd60e51b815260206004820152601a60248201527f4375746f666673206d75737420626520696e6372656173696e6700000000000060448201526064016104f2565b878610156106705760405162461bcd60e51b815260206004820152601560248201527f736c6f70652063616e6e6f74206465637265617365000000000000000000000060448201526064016104f2565b858410156106c05760405162461bcd60e51b815260206004820152601560248201527f736c6f70652063616e6e6f74206465637265617365000000000000000000000060448201526064016104f2565b60656106cc8a826111ff565b50606688905560678790556069869055600087670de0b6b3a76400006106f2888c6112d5565b6106fc91906112ec565b610706919061130e565b90506000670de0b6b3a764000061071d888a6112d5565b61072791906112ec565b90508181111561075057606b805460ff191660011790556107488282611321565b606a5561075e565b61075a8183611321565b606a555b6068879055606d869055606a54670de0b6b3a764000061077e878b6112d5565b61078891906112ec565b610792919061130e565b90506000670de0b6b3a76400006107a987896112d5565b6107b391906112ec565b9050818111156107dc57606f805460ff191660011790556107d48282611321565b606e556107ea565b6107e68183611321565b606e555b606c86905560738590556070849055607480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517fd833f19f31456e9c8d409b98370fe385ee40472047f2b6c0d5decb3e20a2161190610867908e908e908e908e908e908e908e908e908e90611334565b60405180910390a1505050505050505050505050565b600054610100900460ff161580801561089d5750600054600160ff909116105b806108b75750303b1580156108b7575060005460ff166001145b6109295760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104f2565b6000805460ff19166001179055801561094c576000805461ff0019166101001790555b610954610ce7565b6074805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040519081527f42a456866a0731114133c0b0a1ac4c629e13e3c9eee0aa94fc6f96ad93c362d69060200160405180910390a180156109f8576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60008060715442610a0d9190611321565b607054909150808211610a47578082607254610a2991906112d5565b610a3391906112ec565b607254610a409190611321565b9250505090565b60009250505090565b6074546000906001600160a01b03163314610aad5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c7920636f6e74726f6c6c65722063616e2075706461746520666565000060448201526064016104f2565b610ab985858585610c14565b42607155607281905595945050505050565b610ad3610b5b565b6001600160a01b038116610b4f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f2565b610b5881610bb5565b50565b6033546001600160a01b031633146105665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f2565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6073546000908015610c795780610c2b878761130e565b1115610c795760405162461bcd60e51b815260206004820152601c60248201527f436f6c6c61746572616c20696e7075742065786365656473206361700000000060448201526064016104f2565b6000610c858686610d5a565b90506000610c9c610c96898961130e565b86610d5a565b90506000610ca86109fc565b9050610cda670de0b6b3a7640000610cd56002610cc5868861130e565b610ccf91906112ec565b84610ee2565b610efb565b9998505050505050505050565b600054610100900460ff16610d525760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b610566610f0b565b600081600003610d6c57506000610edc565b600082610d8185670de0b6b3a76400006112d5565b610d8b91906112ec565b9050670de0b6b3a7640000811115610de55760405162461bcd60e51b815260206004820152601c60248201527f70657263656e74206261636b6564206f7574206f6620626f756e64730000000060448201526064016104f2565b6068548111610e3557610e2d606754670de0b6b3a764000083606654610e0b91906112d5565b610e1591906112ec565b610e1f919061130e565b670de0b6b3a7640000610efb565b915050610edc565b606c548111610e9757606b5460ff1615610e7a57610e2d606a54670de0b6b3a764000083606954610e6691906112d5565b610e7091906112ec565b610e1f9190611321565b610e2d606a54670de0b6b3a764000083606954610e0b91906112d5565b606f5460ff1615610ebf57610e2d606e54670de0b6b3a764000083606d54610e6691906112d5565b610e2d606e54670de0b6b3a764000083606d54610e0b91906112d5565b92915050565b600081831115610ef25782610ef4565b815b9392505050565b600081831015610ef25782610ef4565b600054610100900460ff16610f765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b61056633610bb5565b6000815180845260005b81811015610fa557602081850181015186830182015201610f89565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ef46020830184610f7f565b600060208284031215610fea57600080fd5b5035919050565b6000806040838503121561100457600080fd5b50508035926020909101359150565b6000806000806080858703121561102957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060008060006101208a8c03121561107a57600080fd5b893567ffffffffffffffff8082111561109257600080fd5b818c0191508c601f8301126110a657600080fd5b8135818111156110b8576110b8611045565b604051601f8201601f19908116603f011681019083821181831017156110e0576110e0611045565b816040528281528f60208487010111156110f957600080fd5b82602086016020830137600060209382018401529f918e01359e505060408d01359c60608101359c5060808101359b5060a08101359a5060c0810135995060e0810135985061010001359650945050505050565b60006020828403121561115f57600080fd5b81356001600160a01b0381168114610ef457600080fd5b600181811c9082168061118a57607f821691505b6020821081036111aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156111fa57600081815260208120601f850160051c810160208610156111d75750805b601f850160051c820191505b818110156111f6578281556001016111e3565b5050505b505050565b815167ffffffffffffffff81111561121957611219611045565b61122d816112278454611176565b846111b0565b602080601f831160018114611262576000841561124a5750858301515b600019600386901b1c1916600185901b1785556111f6565b600085815260208120601f198616915b8281101561129157888601518255948401946001909101908401611272565b50858210156112af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610edc57610edc6112bf565b60008261130957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610edc57610edc6112bf565b81810381811115610edc57610edc6112bf565b60006101208083526113488184018d610f7f565b602084019b909b52505060408101979097526060870195909552608086019390935260a085019190915260c084015260e08301526101009091015291905056fea26469706673582212209767f976d8520e63c19ba847a81ca394fce2a7d665ac4a97838bb45d6ed263ff64736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063a0230b4f11610104578063ce405095116100a2578063e9b6190911610071578063e9b6190914610385578063ee4950021461038e578063f2cfd55114610397578063f2fde38b146103b257600080fd5b8063ce40509514610358578063d26e6aa414610361578063d33fa1fe14610369578063e98f61761461037257600080fd5b8063a77f92ff116100de578063a77f92ff14610320578063b34b408e14610329578063be1420231461033c578063c4d66de81461034557600080fd5b8063a0230b4f146102fa578063a0716db514610303578063a5bef6d81461031757600080fd5b80634b24ea471161017c57806373ddaef41161014b57806373ddaef4146102ba5780638da5cb5b146102cd57806391aa69ca146102de57806397498845146102e757600080fd5b80634b24ea47146102715780635de322e31461029c57806366b5ae1f146102a9578063715018a6146102b257600080fd5b8063158ef93e116101b8578063158ef93e146102295780632bf838c3146102485780632c3609a0146102515780633ab2fb2b1461026457600080fd5b806306fdde03146101df5780630add6ef2146101fd57806311cfe6a914610214575b600080fd5b6101e76103c5565b6040516101f49190610fc5565b60405180910390f35b610206606a5481565b6040519081526020016101f4565b610227610222366004610fd8565b610453565b005b6074546001600160a01b031615155b60405190151581526020016101f4565b610206606c5481565b61022761025f366004610ff1565b61049c565b606f546102389060ff1681565b607454610284906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b606b546102389060ff1681565b61020660715481565b610227610554565b6102066102c8366004611013565b610568565b6033546001600160a01b0316610284565b61020660695481565b6102276102f5366004610fd8565b61057f565b610206606d5481565b60745461023890600160a01b900460ff1681565b61020660735481565b61020660665481565b61022761033736600461105b565b6105c8565b61020660725481565b61022761035336600461114d565b61087d565b61020660685481565b6102066109fc565b61020660705481565b610206610380366004611013565b610a50565b610206606e5481565b61020660675481565b607254607154604080519283526020830191909152016101f4565b6102276103c036600461114d565b610acb565b606580546103d290611176565b80601f01602080910402602001604051908101604052809291908181526020018280546103fe90611176565b801561044b5780601f106104205761010080835404028352916020019161044b565b820191906000526020600020905b81548152906001019060200180831161042e57829003601f168201915b505050505081565b61045b610b5b565b60735460408051918252602082018390527f24399c5dc569ae6a84e4f1f5b920be8287c6b4641798200e4a061c7f0e5f104d910160405180910390a1607355565b6074546001600160a01b031633146104fb5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520636f6e74726f6c6c65720000000000000060448201526064015b60405180910390fd5b6072546071546040805192835260208301919091528101839052606081018290527f46260e4b1cf55abf72e8979ac735bccbb337ae91602223beefa84e215677d4a69060800160405180910390a1607291909155607155565b61055c610b5b565b6105666000610bb5565b565b600061057685858585610c14565b95945050505050565b610587610b5b565b60705460408051918252602082018390527f174b6c5c9fb671a22fef882eb99be5ffda98949070adf83534f2ab1846078b85910160405180910390a1607055565b6105d0610b5b565b828511156106205760405162461bcd60e51b815260206004820152601a60248201527f4375746f666673206d75737420626520696e6372656173696e6700000000000060448201526064016104f2565b878610156106705760405162461bcd60e51b815260206004820152601560248201527f736c6f70652063616e6e6f74206465637265617365000000000000000000000060448201526064016104f2565b858410156106c05760405162461bcd60e51b815260206004820152601560248201527f736c6f70652063616e6e6f74206465637265617365000000000000000000000060448201526064016104f2565b60656106cc8a826111ff565b50606688905560678790556069869055600087670de0b6b3a76400006106f2888c6112d5565b6106fc91906112ec565b610706919061130e565b90506000670de0b6b3a764000061071d888a6112d5565b61072791906112ec565b90508181111561075057606b805460ff191660011790556107488282611321565b606a5561075e565b61075a8183611321565b606a555b6068879055606d869055606a54670de0b6b3a764000061077e878b6112d5565b61078891906112ec565b610792919061130e565b90506000670de0b6b3a76400006107a987896112d5565b6107b391906112ec565b9050818111156107dc57606f805460ff191660011790556107d48282611321565b606e556107ea565b6107e68183611321565b606e555b606c86905560738590556070849055607480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517fd833f19f31456e9c8d409b98370fe385ee40472047f2b6c0d5decb3e20a2161190610867908e908e908e908e908e908e908e908e908e90611334565b60405180910390a1505050505050505050505050565b600054610100900460ff161580801561089d5750600054600160ff909116105b806108b75750303b1580156108b7575060005460ff166001145b6109295760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104f2565b6000805460ff19166001179055801561094c576000805461ff0019166101001790555b610954610ce7565b6074805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040519081527f42a456866a0731114133c0b0a1ac4c629e13e3c9eee0aa94fc6f96ad93c362d69060200160405180910390a180156109f8576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60008060715442610a0d9190611321565b607054909150808211610a47578082607254610a2991906112d5565b610a3391906112ec565b607254610a409190611321565b9250505090565b60009250505090565b6074546000906001600160a01b03163314610aad5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c7920636f6e74726f6c6c65722063616e2075706461746520666565000060448201526064016104f2565b610ab985858585610c14565b42607155607281905595945050505050565b610ad3610b5b565b6001600160a01b038116610b4f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f2565b610b5881610bb5565b50565b6033546001600160a01b031633146105665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f2565b603380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6073546000908015610c795780610c2b878761130e565b1115610c795760405162461bcd60e51b815260206004820152601c60248201527f436f6c6c61746572616c20696e7075742065786365656473206361700000000060448201526064016104f2565b6000610c858686610d5a565b90506000610c9c610c96898961130e565b86610d5a565b90506000610ca86109fc565b9050610cda670de0b6b3a7640000610cd56002610cc5868861130e565b610ccf91906112ec565b84610ee2565b610efb565b9998505050505050505050565b600054610100900460ff16610d525760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b610566610f0b565b600081600003610d6c57506000610edc565b600082610d8185670de0b6b3a76400006112d5565b610d8b91906112ec565b9050670de0b6b3a7640000811115610de55760405162461bcd60e51b815260206004820152601c60248201527f70657263656e74206261636b6564206f7574206f6620626f756e64730000000060448201526064016104f2565b6068548111610e3557610e2d606754670de0b6b3a764000083606654610e0b91906112d5565b610e1591906112ec565b610e1f919061130e565b670de0b6b3a7640000610efb565b915050610edc565b606c548111610e9757606b5460ff1615610e7a57610e2d606a54670de0b6b3a764000083606954610e6691906112d5565b610e7091906112ec565b610e1f9190611321565b610e2d606a54670de0b6b3a764000083606954610e0b91906112d5565b606f5460ff1615610ebf57610e2d606e54670de0b6b3a764000083606d54610e6691906112d5565b610e2d606e54670de0b6b3a764000083606d54610e0b91906112d5565b92915050565b600081831115610ef25782610ef4565b815b9392505050565b600081831015610ef25782610ef4565b600054610100900460ff16610f765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b61056633610bb5565b6000815180845260005b81811015610fa557602081850181015186830182015201610f89565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ef46020830184610f7f565b600060208284031215610fea57600080fd5b5035919050565b6000806040838503121561100457600080fd5b50508035926020909101359150565b6000806000806080858703121561102957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060008060006101208a8c03121561107a57600080fd5b893567ffffffffffffffff8082111561109257600080fd5b818c0191508c601f8301126110a657600080fd5b8135818111156110b8576110b8611045565b604051601f8201601f19908116603f011681019083821181831017156110e0576110e0611045565b816040528281528f60208487010111156110f957600080fd5b82602086016020830137600060209382018401529f918e01359e505060408d01359c60608101359c5060808101359b5060a08101359a5060c0810135995060e0810135985061010001359650945050505050565b60006020828403121561115f57600080fd5b81356001600160a01b0381168114610ef457600080fd5b600181811c9082168061118a57607f821691505b6020821081036111aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156111fa57600081815260208120601f850160051c810160208610156111d75750805b601f850160051c820191505b818110156111f6578281556001016111e3565b5050505b505050565b815167ffffffffffffffff81111561121957611219611045565b61122d816112278454611176565b846111b0565b602080601f831160018114611262576000841561124a5750858301515b600019600386901b1c1916600185901b1785556111f6565b600085815260208120601f198616915b8281101561129157888601518255948401946001909101908401611272565b50858210156112af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610edc57610edc6112bf565b60008261130957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610edc57610edc6112bf565b81810381811115610edc57610edc6112bf565b60006101208083526113488184018d610f7f565b602084019b909b52505060408101979097526060870195909552608086019390935260a085019190915260c084015260e08301526101009091015291905056fea26469706673582212209767f976d8520e63c19ba847a81ca394fce2a7d665ac4a97838bb45d6ed263ff64736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
