{
  "_format": "hh-sol-artifact-1",
  "contractName": "TradeModule",
  "sourceName": "contracts/protocol/modules/v1/TradeModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sendToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_receiveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IExchangeAdapter",
          "name": "_exchangeAdapter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_totalSendAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_totalReceiveAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "ComponentExchanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_exchangeName",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "_sendToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_sendQuantity",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_receiveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_minReceiveQuantity",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "trade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051611f00380380611f0083398101604081905261002f91610058565b600080546001600160a01b0319166001600160a01b039290921691909117905560018055610086565b600060208284031215610069578081fd5b81516001600160a01b038116811461007f578182fd5b9392505050565b611e6b806100956000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a5cb52914610051578063847ef08d14610066578063c4d66de81461006e578063f77c479114610081575b600080fd5b61006461005f3660046118c4565b61009f565b005b6100646101a3565b61006461007c3660046118a8565b6101a5565b610089610214565b60405161009691906119b8565b60405180910390f35b600260015414156100cb5760405162461bcd60e51b81526004016100c290611d32565b60405180910390fd5b6002600155866100da81610223565b6100e261161b565b6100f0898989888a89610271565b90506100fc8187610463565b61010681846104ca565b6000610111826106a3565b9050600061011f838361076b565b905060008061012d85610795565b91509150886001600160a01b03168b6001600160a01b03168e6001600160a01b03167ff26ad8d17d1f980b62e857e137d0a000ce14bcf3b2aa54e1a0c7d57cf907e1a488602001518686896040516101889493929190611a63565b60405180910390a45050600180555050505050505050505050565b565b806101af8161083d565b81336101bb82826108fe565b836001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156101f657600080fd5b505af115801561020a573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b61022d8133610924565b6102495760405162461bcd60e51b81526004016100c290611cfb565b610252816109b2565b61026e5760405162461bcd60e51b81526004016100c290611ad3565b50565b61027961161b565b61028161161b565b6001600160a01b038816815261029687610ab6565b6001600160a01b03908116602080840191909152878216604080850191909152878316606085015280516318160ddd60e01b81529051928b16926318160ddd92600480840193919291829003018186803b1580156102f357600080fd5b505afa158015610307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032b9190611974565b6080820181905261033c9085610acd565b60a082015260808101516103509084610acd565b60c08201526040516370a0823160e01b81526001600160a01b038716906370a0823190610381908b906004016119b8565b60206040518083038186803b15801561039957600080fd5b505afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611974565b60e08201526040516370a0823160e01b81526001600160a01b038616906370a0823190610402908b906004016119b8565b60206040518083038186803b15801561041a57600080fd5b505afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190611974565b610100820152979650505050505050565b60008260a00151116104875760405162461bcd60e51b81526004016100c290611d69565b604082015182516104aa916001600160a01b03909116908363ffffffff610adf16565b6104c65760405162461bcd60e51b81526004016100c290611c2e565b5050565b610565826040015183602001516001600160a01b031663334fc2896040518163ffffffff1660e01b815260040160206040518083038186803b15801561050f57600080fd5b505afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105479190611736565b60a085015185516001600160a01b031692919063ffffffff610b7016565b600080606084602001516001600160a01b031663e171fcab8660400151876060015188600001518960a001518a60c001518a6040518763ffffffff1660e01b81526004016105b8969594939291906119cc565b60006040518083038186803b1580156105d057600080fd5b505afa1580156105e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261060c9190810190611752565b87516040516347b7819960e11b815293965091945092506001600160a01b031690638f6f03329061064590869086908690600401611a33565b600060405180830381600087803b15801561065f57600080fd5b505af1158015610673573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261069b9190810190611875565b505050505050565b60008061073f83610100015184606001516001600160a01b03166370a0823186600001516040518263ffffffff1660e01b81526004016106e391906119b8565b60206040518083038186803b1580156106fb57600080fd5b505afa15801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611974565b9063ffffffff610be116565b90508260c001518110156107655760405162461bcd60e51b81526004016100c290611a9c565b92915050565b600080610779600084610c23565b905061078e8460000151856060015183610cc0565b9392505050565b60008060006107ca846040015185608001518660e0015187600001516001600160a01b0316610d6c909392919063ffffffff16565b5050905060006108018560600151866080015187610100015188600001516001600160a01b0316610d6c909392919063ffffffff16565b505060e086015190915061081b908363ffffffff610be116565b61010086015161083290839063ffffffff610be116565b935093505050915091565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061086d9084906004016119b8565b60206040518083038186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd9190611855565b6108d95760405162461bcd60e51b81526004016100c290611cb8565b6108e281610eb2565b61026e5760405162461bcd60e51b81526004016100c290611b1b565b6109088282610924565b6104c65760405162461bcd60e51b81526004016100c290611cfb565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561096957600080fd5b505afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a19190611736565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906109e39085906004016119b8565b60206040518083038186803b1580156109fb57600080fd5b505afa158015610a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a339190611855565b801561076557506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90610a669030906004016119b8565b60206040518083038186803b158015610a7e57600080fd5b505afa158015610a92573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107659190611855565b600080610ac283610ee1565b905061078e81610eec565b600061078e838363ffffffff610fa916565b6000610aea82610fd3565b6040516366cb8d2f60e01b81526001600160a01b038616906366cb8d2f90610b169087906004016119b8565b60206040518083038186803b158015610b2e57600080fd5b505afa158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b669190611974565b1215949350505050565b60608282604051602401610b85929190611a1a565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906106459087906000908690600401611a33565b600061078e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ffc565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f90610c569030908890600401611a1a565b60206040518083038186803b158015610c6e57600080fd5b505afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca69190611974565b9050610cb8838263ffffffff610fa916565b949350505050565b8015610d6757610d67826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1757600080fd5b505afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190611736565b6001600160a01b03861691908463ffffffff61102816565b505050565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401610d9e91906119b8565b60206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190611974565b90506000610e76896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b8152600401610e2191906119b8565b60206040518083038186803b158015610e3957600080fd5b505afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190611974565b611170565b905060008215610e9357610e8c88888585611192565b9050610e97565b5060005b610ea28a8a836111e1565b9199909850909650945050505050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790610a669030906004016119b8565b805160209091012090565b600080548190610f04906001600160a01b0316611341565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b8152600401610f31929190611a1a565b60206040518083038186803b158015610f4957600080fd5b505afa158015610f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f819190611736565b90506001600160a01b0381166107655760405162461bcd60e51b81526004016100c290611b52565b600061078e670de0b6b3a7640000610fc7858563ffffffff6113c016565b9063ffffffff6113fa16565b6000600160ff1b8210610ff85760405162461bcd60e51b81526004016100c290611c70565b5090565b600081848411156110205760405162461bcd60e51b81526004016100c29190611a89565b505050900390565b801561116a576040516370a0823160e01b81526000906001600160a01b038516906370a082319061105d9088906004016119b8565b60206040518083038186803b15801561107557600080fd5b505afa158015611089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190611974565b90506110bb8585858561143c565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906110ea9089906004016119b8565b60206040518083038186803b15801561110257600080fd5b505afa158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113a9190611974565b905061114c828463ffffffff610be116565b811461069b5760405162461bcd60e51b81526004016100c290611bf7565b50505050565b600080821215610ff85760405162461bcd60e51b81526004016100c290611b81565b6000806111b56111a8848863ffffffff610fa916565b869063ffffffff610be116565b90506111d7866111cb868463ffffffff610be116565b9063ffffffff6114b316565b9695505050505050565b60006111ed84846114d1565b9050801580156111fd5750600082115b156112745761120c8484611558565b61126f576040516304e3532760e41b81526001600160a01b03851690634e3532709061123c9086906004016119b8565b600060405180830381600087803b15801561125657600080fd5b505af115801561126a573d6000803e3d6000fd5b505050505b6112f1565b80801561127f575081155b156112f15761128e8484611558565b6112f157604051636f86c89760e01b81526001600160a01b03851690636f86c897906112be9086906004016119b8565b600060405180830381600087803b1580156112d857600080fd5b505af11580156112ec573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d178461130a85610fd3565b6040518363ffffffff1660e01b8152600401611327929190611a1a565b600060405180830381600087803b1580156101f657600080fd5b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690611370908490600401611da0565b60206040518083038186803b15801561138857600080fd5b505afa15801561139c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107659190611736565b6000826113cf57506000610765565b828202828482816113dc57fe5b041461078e5760405162461bcd60e51b81526004016100c290611bb6565b600061078e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115e4565b801561116a5760608282604051602401611457929190611a1a565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906106459087906000908690600401611a33565b600061078e82610fc785670de0b6b3a764000063ffffffff6113c016565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b815260040161150091906119b8565b60206040518083038186803b15801561151857600080fd5b505afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115509190611974565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b815260040161158791906119b8565b60006040518083038186803b15801561159f57600080fd5b505afa1580156115b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115db91908101906117aa565b51119392505050565b600081836116055760405162461bcd60e51b81526004016100c29190611a89565b50600083858161161157fe5b0495945050505050565b60405180610120016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b805161076581611e20565b600082601f8301126116a6578081fd5b81356116b96116b482611dd0565b611da9565b91508082528360208285010111156116d057600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126116f9578081fd5b81516117076116b482611dd0565b915080825283602082850101111561171e57600080fd5b61172f816020840160208601611df4565b5092915050565b600060208284031215611747578081fd5b815161078e81611e20565b600080600060608486031215611766578182fd5b835161177181611e20565b60208501516040860151919450925067ffffffffffffffff811115611794578182fd5b6117a0868287016116e9565b9150509250925092565b600060208083850312156117bc578182fd5b825167ffffffffffffffff808211156117d3578384fd5b81850186601f8201126117e4578485fd5b80519250818311156117f4578485fd5b8383029150611804848301611da9565b8381528481019082860184840187018a101561181e578788fd5b8794505b85851015611848576118348a8261168b565b835260019490940193918601918601611822565b5098975050505050505050565b600060208284031215611866578081fd5b8151801515811461078e578182fd5b600060208284031215611886578081fd5b815167ffffffffffffffff81111561189c578182fd5b610cb8848285016116e9565b6000602082840312156118b9578081fd5b813561078e81611e20565b600080600080600080600060e0888a0312156118de578283fd5b87356118e981611e20565b9650602088013567ffffffffffffffff80821115611905578485fd5b6119118b838c01611696565b975060408a0135915061192382611e20565b9095506060890135945060808901359061193c82611e20565b90935060a0890135925060c08901359080821115611958578283fd5b506119658a828b01611696565b91505092959891949750929550565b600060208284031215611985578081fd5b5051919050565b600081518084526119a4816020860160208601611df4565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038781168252868116602083015285166040820152606081018490526080810183905260c060a08201819052600090611a0e9083018461198c565b98975050505050505050565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152611a5a606083018461198c565b95945050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b60006020825261078e602083018461198c565b6020808252601d908201527f536c6970706167652067726561746572207468616e20616c6c6f776564000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526022908201527f556e69742063616e742062652067726561746572207468616e206578697374696040820152616e6760f01b606082015260800190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601d908201527f546f6b656e20746f2073656c6c206d757374206265206e6f6e7a65726f000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715611dc857600080fd5b604052919050565b600067ffffffffffffffff821115611de6578081fd5b50601f01601f191660200190565b60005b83811015611e0f578181015183820152602001611df7565b8381111561116a5750506000910152565b6001600160a01b038116811461026e57600080fdfea2646970667358221220d09c10e554bec1b532ed210abae797a518bcb6bebc3fb87e4b3d9b6a62f3da2b64736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a5cb52914610051578063847ef08d14610066578063c4d66de81461006e578063f77c479114610081575b600080fd5b61006461005f3660046118c4565b61009f565b005b6100646101a3565b61006461007c3660046118a8565b6101a5565b610089610214565b60405161009691906119b8565b60405180910390f35b600260015414156100cb5760405162461bcd60e51b81526004016100c290611d32565b60405180910390fd5b6002600155866100da81610223565b6100e261161b565b6100f0898989888a89610271565b90506100fc8187610463565b61010681846104ca565b6000610111826106a3565b9050600061011f838361076b565b905060008061012d85610795565b91509150886001600160a01b03168b6001600160a01b03168e6001600160a01b03167ff26ad8d17d1f980b62e857e137d0a000ce14bcf3b2aa54e1a0c7d57cf907e1a488602001518686896040516101889493929190611a63565b60405180910390a45050600180555050505050505050505050565b565b806101af8161083d565b81336101bb82826108fe565b836001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156101f657600080fd5b505af115801561020a573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031681565b61022d8133610924565b6102495760405162461bcd60e51b81526004016100c290611cfb565b610252816109b2565b61026e5760405162461bcd60e51b81526004016100c290611ad3565b50565b61027961161b565b61028161161b565b6001600160a01b038816815261029687610ab6565b6001600160a01b03908116602080840191909152878216604080850191909152878316606085015280516318160ddd60e01b81529051928b16926318160ddd92600480840193919291829003018186803b1580156102f357600080fd5b505afa158015610307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032b9190611974565b6080820181905261033c9085610acd565b60a082015260808101516103509084610acd565b60c08201526040516370a0823160e01b81526001600160a01b038716906370a0823190610381908b906004016119b8565b60206040518083038186803b15801561039957600080fd5b505afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611974565b60e08201526040516370a0823160e01b81526001600160a01b038616906370a0823190610402908b906004016119b8565b60206040518083038186803b15801561041a57600080fd5b505afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190611974565b610100820152979650505050505050565b60008260a00151116104875760405162461bcd60e51b81526004016100c290611d69565b604082015182516104aa916001600160a01b03909116908363ffffffff610adf16565b6104c65760405162461bcd60e51b81526004016100c290611c2e565b5050565b610565826040015183602001516001600160a01b031663334fc2896040518163ffffffff1660e01b815260040160206040518083038186803b15801561050f57600080fd5b505afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105479190611736565b60a085015185516001600160a01b031692919063ffffffff610b7016565b600080606084602001516001600160a01b031663e171fcab8660400151876060015188600001518960a001518a60c001518a6040518763ffffffff1660e01b81526004016105b8969594939291906119cc565b60006040518083038186803b1580156105d057600080fd5b505afa1580156105e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261060c9190810190611752565b87516040516347b7819960e11b815293965091945092506001600160a01b031690638f6f03329061064590869086908690600401611a33565b600060405180830381600087803b15801561065f57600080fd5b505af1158015610673573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261069b9190810190611875565b505050505050565b60008061073f83610100015184606001516001600160a01b03166370a0823186600001516040518263ffffffff1660e01b81526004016106e391906119b8565b60206040518083038186803b1580156106fb57600080fd5b505afa15801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611974565b9063ffffffff610be116565b90508260c001518110156107655760405162461bcd60e51b81526004016100c290611a9c565b92915050565b600080610779600084610c23565b905061078e8460000151856060015183610cc0565b9392505050565b60008060006107ca846040015185608001518660e0015187600001516001600160a01b0316610d6c909392919063ffffffff16565b5050905060006108018560600151866080015187610100015188600001516001600160a01b0316610d6c909392919063ffffffff16565b505060e086015190915061081b908363ffffffff610be116565b61010086015161083290839063ffffffff610be116565b935093505050915091565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061086d9084906004016119b8565b60206040518083038186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd9190611855565b6108d95760405162461bcd60e51b81526004016100c290611cb8565b6108e281610eb2565b61026e5760405162461bcd60e51b81526004016100c290611b1b565b6109088282610924565b6104c65760405162461bcd60e51b81526004016100c290611cfb565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561096957600080fd5b505afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a19190611736565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906109e39085906004016119b8565b60206040518083038186803b1580156109fb57600080fd5b505afa158015610a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a339190611855565b801561076557506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90610a669030906004016119b8565b60206040518083038186803b158015610a7e57600080fd5b505afa158015610a92573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107659190611855565b600080610ac283610ee1565b905061078e81610eec565b600061078e838363ffffffff610fa916565b6000610aea82610fd3565b6040516366cb8d2f60e01b81526001600160a01b038616906366cb8d2f90610b169087906004016119b8565b60206040518083038186803b158015610b2e57600080fd5b505afa158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b669190611974565b1215949350505050565b60608282604051602401610b85929190611a1a565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906106459087906000908690600401611a33565b600061078e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610ffc565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f90610c569030908890600401611a1a565b60206040518083038186803b158015610c6e57600080fd5b505afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca69190611974565b9050610cb8838263ffffffff610fa916565b949350505050565b8015610d6757610d67826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015610d1757600080fd5b505afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190611736565b6001600160a01b03861691908463ffffffff61102816565b505050565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401610d9e91906119b8565b60206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190611974565b90506000610e76896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b8152600401610e2191906119b8565b60206040518083038186803b158015610e3957600080fd5b505afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190611974565b611170565b905060008215610e9357610e8c88888585611192565b9050610e97565b5060005b610ea28a8a836111e1565b9199909850909650945050505050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790610a669030906004016119b8565b805160209091012090565b600080548190610f04906001600160a01b0316611341565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b8152600401610f31929190611a1a565b60206040518083038186803b158015610f4957600080fd5b505afa158015610f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f819190611736565b90506001600160a01b0381166107655760405162461bcd60e51b81526004016100c290611b52565b600061078e670de0b6b3a7640000610fc7858563ffffffff6113c016565b9063ffffffff6113fa16565b6000600160ff1b8210610ff85760405162461bcd60e51b81526004016100c290611c70565b5090565b600081848411156110205760405162461bcd60e51b81526004016100c29190611a89565b505050900390565b801561116a576040516370a0823160e01b81526000906001600160a01b038516906370a082319061105d9088906004016119b8565b60206040518083038186803b15801561107557600080fd5b505afa158015611089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ad9190611974565b90506110bb8585858561143c565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906110ea9089906004016119b8565b60206040518083038186803b15801561110257600080fd5b505afa158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113a9190611974565b905061114c828463ffffffff610be116565b811461069b5760405162461bcd60e51b81526004016100c290611bf7565b50505050565b600080821215610ff85760405162461bcd60e51b81526004016100c290611b81565b6000806111b56111a8848863ffffffff610fa916565b869063ffffffff610be116565b90506111d7866111cb868463ffffffff610be116565b9063ffffffff6114b316565b9695505050505050565b60006111ed84846114d1565b9050801580156111fd5750600082115b156112745761120c8484611558565b61126f576040516304e3532760e41b81526001600160a01b03851690634e3532709061123c9086906004016119b8565b600060405180830381600087803b15801561125657600080fd5b505af115801561126a573d6000803e3d6000fd5b505050505b6112f1565b80801561127f575081155b156112f15761128e8484611558565b6112f157604051636f86c89760e01b81526001600160a01b03851690636f86c897906112be9086906004016119b8565b600060405180830381600087803b1580156112d857600080fd5b505af11580156112ec573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d178461130a85610fd3565b6040518363ffffffff1660e01b8152600401611327929190611a1a565b600060405180830381600087803b1580156101f657600080fd5b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced690611370908490600401611da0565b60206040518083038186803b15801561138857600080fd5b505afa15801561139c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107659190611736565b6000826113cf57506000610765565b828202828482816113dc57fe5b041461078e5760405162461bcd60e51b81526004016100c290611bb6565b600061078e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115e4565b801561116a5760608282604051602401611457929190611a1a565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906106459087906000908690600401611a33565b600061078e82610fc785670de0b6b3a764000063ffffffff6113c016565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b815260040161150091906119b8565b60206040518083038186803b15801561151857600080fd5b505afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115509190611974565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b815260040161158791906119b8565b60006040518083038186803b15801561159f57600080fd5b505afa1580156115b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115db91908101906117aa565b51119392505050565b600081836116055760405162461bcd60e51b81526004016100c29190611a89565b50600083858161161157fe5b0495945050505050565b60405180610120016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b805161076581611e20565b600082601f8301126116a6578081fd5b81356116b96116b482611dd0565b611da9565b91508082528360208285010111156116d057600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126116f9578081fd5b81516117076116b482611dd0565b915080825283602082850101111561171e57600080fd5b61172f816020840160208601611df4565b5092915050565b600060208284031215611747578081fd5b815161078e81611e20565b600080600060608486031215611766578182fd5b835161177181611e20565b60208501516040860151919450925067ffffffffffffffff811115611794578182fd5b6117a0868287016116e9565b9150509250925092565b600060208083850312156117bc578182fd5b825167ffffffffffffffff808211156117d3578384fd5b81850186601f8201126117e4578485fd5b80519250818311156117f4578485fd5b8383029150611804848301611da9565b8381528481019082860184840187018a101561181e578788fd5b8794505b85851015611848576118348a8261168b565b835260019490940193918601918601611822565b5098975050505050505050565b600060208284031215611866578081fd5b8151801515811461078e578182fd5b600060208284031215611886578081fd5b815167ffffffffffffffff81111561189c578182fd5b610cb8848285016116e9565b6000602082840312156118b9578081fd5b813561078e81611e20565b600080600080600080600060e0888a0312156118de578283fd5b87356118e981611e20565b9650602088013567ffffffffffffffff80821115611905578485fd5b6119118b838c01611696565b975060408a0135915061192382611e20565b9095506060890135945060808901359061193c82611e20565b90935060a0890135925060c08901359080821115611958578283fd5b506119658a828b01611696565b91505092959891949750929550565b600060208284031215611985578081fd5b5051919050565b600081518084526119a4816020860160208601611df4565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038781168252868116602083015285166040820152606081018490526080810183905260c060a08201819052600090611a0e9083018461198c565b98975050505050505050565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152611a5a606083018461198c565b95945050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b60006020825261078e602083018461198c565b6020808252601d908201527f536c6970706167652067726561746572207468616e20616c6c6f776564000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526022908201527f556e69742063616e742062652067726561746572207468616e206578697374696040820152616e6760f01b606082015260800190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601d908201527f546f6b656e20746f2073656c6c206d757374206265206e6f6e7a65726f000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715611dc857600080fd5b604052919050565b600067ffffffffffffffff821115611de6578081fd5b50601f01601f191660200190565b60005b83811015611e0f578181015183820152602001611df7565b8381111561116a5750506000910152565b6001600160a01b038116811461026e57600080fdfea2646970667358221220d09c10e554bec1b532ed210abae797a518bcb6bebc3fb87e4b3d9b6a62f3da2b64736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
