@dolomite-exchange/dolomite-margin
Version:
Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol
145 lines • 1.53 MB
JSON
{
"contractName": "LiquidatorProxyV1",
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "_chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_liquidatorAssetRegistry",
"type": "address"
},
{
"internalType": "address",
"name": "_dolomiteMargin",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"constant": true,
"inputs": [],
"name": "DOLOMITE_MARGIN",
"outputs": [
{
"internalType": "contract IDolomiteMargin",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "LIQUIDATOR_ASSET_REGISTRY",
"outputs": [
{
"internalType": "contract ILiquidatorAssetRegistry",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "chainId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "_solidAccount",
"type": "tuple"
},
{
"components": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "number",
"type": "uint256"
}
],
"internalType": "struct Account.Info",
"name": "_liquidAccount",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"internalType": "struct Decimal.D256",
"name": "_minLiquidatorRatio",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "_minValueLiquidated",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "_owedPreferences",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "_heldPreferences",
"type": "uint256[]"
}
],
"name": "liquidate",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_liquidatorAssetRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_dolomiteMargin\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"LIQUIDATOR_ASSET_REGISTRY\",\"outputs\":[{\"internalType\":\"contract ILiquidatorAssetRegistry\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"_solidAccount\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"_liquidAccount\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Decimal.D256\",\"name\":\"_minLiquidatorRatio\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_minValueLiquidated\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_owedPreferences\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_heldPreferences\",\"type\":\"uint256[]\"}],\"name\":\"liquidate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"dYdX * Contract for liquidating other accounts in DolomiteMargin.\",\"methods\":{\"liquidate((address,uint256),(address,uint256),(uint256),uint256,uint256[],uint256[])\":{\"params\":{\"_heldPreferences\":\"Ordered list of markets to receive payout for first\",\"_liquidAccount\":\"The account that will be liquidated\",\"_minLiquidatorRatio\":\"The minimum collateralization ratio to leave the solidAccount at. Setting this value to `150000000000000000` is analogous to a 115% collateralization ratio.\",\"_owedPreferences\":\"Ordered list of markets to repay first\",\"_solidAccount\":\"The account that will do the liquidating\"}}},\"title\":\"LiquidatorProxyV1\"},\"userdoc\":{\"methods\":{\"liquidate((address,uint256),(address,uint256),(uint256),uint256,uint256[],uint256[])\":{\"notice\":\"Liquidate liquidAccount using solidAccount. This contract and the msg.sender to this contract must both be operators for the solidAccount.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/LiquidatorProxyV1.sol\":\"LiquidatorProxyV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/HasLiquidatorRegistry.sol\":{\"keccak256\":\"0xf7fb6d26d662f5a7ae5df8e30110664c7254f1a4969c31a3504e166018358e42\",\"urls\":[\"bzz-raw://b1a8adc3fdddce8ad10ce2420570b73218c3dd23238ab0000938051194834389\",\"dweb:/ipfs/QmPE47PxyM2xEat3xCWkiogpNRGkx26KLePGQZhGRGJpk8\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/LiquidatorProxyBase.sol\":{\"keccak256\":\"0x5a7bc34966d0bbaf860283dff729819733c6aeb2d74969de4faa77a38ed0e580\",\"urls\":[\"bzz-raw://4fc391dc8defc010d4736300e52159039540d881b256a62f425de790da44cd48\",\"dweb:/ipfs/QmWGcvumKySkGmCPtGQcw3e6X1Fz17e33mV7QpXr9fgWpV\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/helpers/OnlyDolomiteMargin.sol\":{\"keccak256\":\"0xe40babc0a6dd2a767d76f3e0f0a22de124c4c480f2b2227a7b924b44e57526ea\",\"urls\":[\"bzz-raw://458f7f1f16eacd4faae597090503dc1e58446e9d371640c77b2e01e3e3113f17\",\"dweb:/ipfs/QmXqTG4sWJeDh5XA286KarbqHT4qJ7m3dphS16enpqtQiX\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IExpiry.sol\":{\"keccak256\":\"0xa7b197139e570e823cab42c3b8500c9c5edc8a40110970a7d6fe60f05864ba10\",\"urls\":[\"bzz-raw://4f469be063d8f694c5277650bc53ac2c0d164f62e36c6a9ab7dad126479990a9\",\"dweb:/ipfs/Qme4sTbGi4T2QhsJSweqGzqm5rxQkypy27g1vLy8ipVijV\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/ILiquidatorAssetRegistry.sol\":{\"keccak256\":\"0x0d99615ee12fad08fbdf59a67683af9c7cdcfd2f25cf20b6767ebb6988eec514\",\"urls\":[\"bzz-raw://90230d7a44d9936cda8d1b1fef170daf91750b97d3da9634ed6c079fb8dbd15a\",\"dweb:/ipfs/QmfQxDE36en2hecxS4Y2i4BH6TsSEDEzKNxooysW4GsdKb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/DolomiteVersionLib.sol\":{\"keccak256\":\"0x2b53e388a5307c028d1be1ab654eacb46bd445b24beb367c0782bd408f2a28b4\",\"urls\":[\"bzz-raw://f1b9f5d89093f45e4b83c3220c2a426f4e399c7bd4ba0a6fa95e1ac6a25f77f6\",\"dweb:/ipfs/QmdoQ2xZnB7r7q2i1gEkzn5KyuiDQW1oAjDUHB6x6DG8Fy\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/LiquidatorProxyV1.sol\":{\"keccak256\":\"0x040dcf226acd619326ddb632afe64a672bc39f809177ee8f6fb0412b9790a98c\",\"urls\":[\"bzz-raw://8373d89a1815c523a93ed84bbc2cfe666b2245a09b761b8f3341cd1fd3d99dfb\",\"dweb:/ipfs/QmW4j3cBqujf6fZ6PQuF9aZmoAeBy8iQ4iF8TSTURdRTxb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IAccountRiskOverrideSetter.sol\":{\"keccak256\":\"0x5b9fde139ddfdaae7b650b3c3f6699e0e44605f0d9d3daadc1622eb06ad4c3f8\",\"urls\":[\"bzz-raw://2dfd5af24b6de63f94519c99fd8777a264d7cd11266fa2d525c7d72d96a9c7cf\",\"dweb:/ipfs/QmPg9fjhbnmBayZMh6yTG79xsK1PWSoAHA5pfwSXfnKKjF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x7e86ed1ed04dc205245db9f4e7cf7cca60c3bfc46c57ade8129a463780647967\",\"urls\":[\"bzz-raw://f8fbd85afd334c12bdccbb6523ebea9172b27b7b4b132c4a48b4b4dd03ceeb2b\",\"dweb:/ipfs/QmU1srfSqBTz3kw7oz1KEzfTUJvphZiE4K8MRZcy9uJjv1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IOracleSentinel.sol\":{\"keccak256\":\"0xa94499fda55ef112640daed2cb1d06062e72c51c7b925c323b4e0ffa9b456ce5\",\"urls\":[\"bzz-raw://18b4a16acac577590a57f34f7ec6583e3cb35f575c948abb928b308d29cac1ab\",\"dweb:/ipfs/QmR1jLkzj6w7SjrdZ7GVW4V2vofSdMJwzjTqKpeUKABvxu\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x6d9a641163b2dd25e648c65f5d9e4949a57938e29ddc4c9dddefd74a9964aeef\",\"urls\":[\"bzz-raw://67e5a04ed4055faafbc100d6ccca9c54448ed378a1a8c71171562edda7bcbf7c\",\"dweb:/ipfs/QmYRikK3Xbgiq3UBJkgoo2zNUSSrShVabpRHmQj6iQHhrc\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0xe57c80a7621a77fcb2acb9f883fb5248e71a6dce03bc2db56df0db3fee332950\",\"urls\":[\"bzz-raw://28e221c04629674490b9a0041d4f9a5f15e669dc0cc192a5df6e2c701c36369f\",\"dweb:/ipfs/QmaL3oh8c7v9cx91pB175pyCEuzxnhNTab4UxmBMsDYfUx\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0xd9a348c2b1eec076609ba12bbec6b9c2e4ea135790a7ef4f5411feb050af2144\",\"urls\":[\"bzz-raw://d5bcff29e47d5cd02d7a9966e9f44c46ccbb4f0e4adfc4b0b86646880677db39\",\"dweb:/ipfs/QmRKfJD4FFM1AvTynSFNx1NcDg94o9SAcjz7dvMaJCfecp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0x141a0ecb4a746f0e5767df4b99dbe33c6362df507ae9d5c02da1c1c17bc26df3\",\"urls\":[\"bzz-raw://9ff03e64a8ce5231acde07788624bf8c7a8ff55d90b157fa32f62fa887a0eff0\",\"dweb:/ipfs/QmUVxxWeE954RDXbmHJAYnHsXcit6rSXGqZUigu8t9oH2z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9c27f3cd52af28c9b6bca18097b1793f114d08284d78417467d0d05f67e9e2a9\",\"urls\":[\"bzz-raw://d1ed0e7a7f76d59f30572996d4e164ab8fb5b2ec4bfca127983f9e936b904813\",\"dweb:/ipfs/QmePVYbgrY8Yw3Vf76pmEvE9pX916Jaa9we4kjM8tGM4J1\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0x095b5f8eb3665f6e246200311efc8a654fa3e90f9a1a522e27a4d089e8ab3917\",\"urls\":[\"bzz-raw://5db812b752a03d601d424e6e21be38153477082af0acf51b5c98eefa5553ed18\",\"dweb:/ipfs/QmbE549QUXYTurpx8hSMLBJvuBpfYqyNE6FBCgHJDY8PLf\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb63221b23818d622bfd83d18e0968307e4fcb7a35536bdceded76e1cf8349acd\",\"urls\":[\"bzz-raw://44e1e8c22362c4708a8c3362735f1465f5b05e2f7315e16c7010d694ce019d73\",\"dweb:/ipfs/QmWj9g8X1hxkXRre2kwkEjLBetjuzmSbWHD81bsSojnBkS\"]}},\"version\":1}",
"bytecode": "0x60806040523480156200001157600080fd5b5060405162003a5b38038062003a5b833981016040819052620000349162000096565b6000805460ff60a01b196001600160a01b039384166001600160a01b03199283161716600160a01b179091556001805492909316911617905560025562000124565b80516200008381620000ff565b92915050565b8051620000838162000119565b600080600060608486031215620000ac57600080fd5b6000620000ba868662000089565b9350506020620000cd8682870162000076565b9250506040620000e08682870162000076565b9150509250925092565b60006001600160a01b03821662000083565b90565b6200010a81620000ea565b81146200011657600080fd5b50565b6200010a81620000fc565b61392780620001346000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806315c14a4a146100515780639a8a05921461006f578063c29a4b7114610084578063cf530f8814610099575b600080fd5b6100596100a1565b6040516100669190613645565b60405180910390f35b6100776100bd565b60405161006691906136e5565b610097610092366004613061565b6100c3565b005b610059610611565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60005474010000000000000000000000000000000000000000900460ff16610120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011790613684565b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055816101528161062d565b8161015c8161062d565b610164612b6b565b60005473ffffffffffffffffffffffffffffffffffffffff16808252602082018a905260408083018a905260608301899052517f0f47fab0000000000000000000000000000000000000000000000000000000008152630f47fab0906101ce908b90600401613694565b60006040518083038186803b1580156101e657600080fd5b505afa1580156101fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102229190810190612fb4565b60a082015280516040517f0f47fab00000000000000000000000000000000000000000000000000000000081526102de919073ffffffffffffffffffffffffffffffffffffffff821690630f47fab090610280908e90600401613694565b60006040518083038186803b15801561029857600080fd5b505afa1580156102ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102d49190810190612fb4565b8360a00151610760565b60808201526102ec81610a0c565b6000805b865181101561057557600087828151811061030757fe5b6020026020010151905060005b875181101561056b57600088828151811061032b57fe5b60200260200101519050828114156103435750610563565b6103d9866000015173ffffffffffffffffffffffffffffffffffffffff166347d1b53c8f866040518363ffffffff1660e01b81526004016103859291906136a2565b604080518083038186803b15801561039c57600080fd5b505afa1580156103b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103d49190810190613119565b610e13565b6103e3575061056b565b610479866000015173ffffffffffffffffffffffffffffffffffffffff166347d1b53c8f846040518363ffffffff1660e01b81526004016104259291906136a2565b604080518083038186803b15801561043c57600080fd5b505afa158015610450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104749190810190613119565b610e42565b6104835750610563565b61048b612bc9565b610496878386610e6a565b90506104a181611298565b6104ab8782611422565b80516104b8575050610563565b865173ffffffffffffffffffffffffffffffffffffffff1663a67a6a456104de8961159a565b6104e784611610565b6040518363ffffffff1660e01b8152600401610504929190613620565b600060405180830381600087803b15801561051e57600080fd5b505af1158015610532573d6000803e3d6000fd5b505050610120820151825161055e92506105519163ffffffff6116c916565b879063ffffffff61172616565b955050505b600101610314565b50506001016102f0565b506105c6878210157f4c697175696461746f7250726f787956310000000000000000000000000000007f4e6f7420656e6f756768206c6971756964617461626c652076616c7565000000848b611765565b5050600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790555050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b600154815173ffffffffffffffffffffffffffffffffffffffff9091169060005b8181101561075a576107528373ffffffffffffffffffffffffffffffffffffffff1663d9f4760186848151811061068157fe5b6020026020010151306040518363ffffffff1660e01b81526004016106a79291906136f3565b60206040518083038186803b1580156106bf57600080fd5b505afa1580156106d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106f79190810190612fe9565b7f4861734c697175696461746f72526567697374727900000000000000000000007f4173736574206e6f742077686974656c6973746564000000000000000000000087858151811061074557fe5b6020026020010151611869565b60010161064e565b50505050565b6060806107e98573ffffffffffffffffffffffffffffffffffffffff1663295c39a56040518163ffffffff1660e01b815260040160206040518083038186803b1580156107ac57600080fd5b505afa1580156107c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107e49190810190613137565b611901565b905060006107f885838361193b565b905061080584838361193b565b9050600060608260405190808252806020026020018201604052801561084557816020015b610832612c35565b81526020019060019003908161082a5790505b50905060005b84518110156109fe57600085828151811061086257fe5b602002602001015190505b80156109e757600061087e8261199e565b9050600061088c8483611b57565b905060405180606001604052808281526020018d73ffffffffffffffffffffffffffffffffffffffff16638928378e846040518263ffffffff1660e01b81526004016108d891906136e5565b60206040518083038186803b1580156108f057600080fd5b505afa158015610904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109289190810190613025565b81526020018d73ffffffffffffffffffffffffffffffffffffffff166356ea84b2846040518263ffffffff1660e01b815260040161096691906136e5565b60606040518083038186803b15801561097e57600080fd5b505afa158015610992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109b69190810190613043565b905285516001880197879181106109c957fe5b60200260200101819052506109de8383611b62565b9250505061086d565b848414156109f557506109fe565b5060010161084b565b5093505050505b9392505050565b602081015151610b279073ffffffffffffffffffffffffffffffffffffffff16331480610adf575081516020830151516040517f3a031bf000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691633a031bf091610a8f913390600401613605565b60206040518083038186803b158015610aa757600080fd5b505afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610adf9190810190612fe9565b7f4c697175696461746f7250726f787956310000000000000000000000000000007f53656e646572206e6f74206f70657261746f720000000000000000000000000033611b6b565b610b2f612c61565b610b37612c61565b8251608084015160408086015160a087015191517f5d3c0ce8000000000000000000000000000000000000000000000000000000008152610bf69493929073ffffffffffffffffffffffffffffffffffffffff851690635d3c0ce890610ba1908590600401613694565b60206040518083038186803b158015610bb957600080fd5b505afa158015610bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bf19190810190613025565b611bcd565b81519193509150610c4a9015157f4c697175696461746f7250726f787956310000000000000000000000000000007f4c6971756964206163636f756e74206e6f20737570706c790000000000000000611bfa565b610e0e6001845160408087015190517fe51bfcb400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163e51bfcb491610ca791600401613694565b60206040518083038186803b158015610cbf57600080fd5b505afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cf79190810190613007565b6002811115610d0257fe5b1480610dc1575082518251855160408088015190517f105de10c000000000000000000000000000000000000000000000000000000008152610dbf94939273ffffffffffffffffffffffffffffffffffffffff169163105de10c91610d6a9190600401613694565b60206040518083038186803b158015610d8257600080fd5b505afa158015610d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dba9190810190613025565b611c44565b155b835183517f4c697175696461746f7250726f78795631000000000000000000000000000000917f4c6971756964206163636f756e74206e6f74206c6971756964617461626c650091611765565b505050565b8051600090158015610e3a575060208201516fffffffffffffffffffffffffffffffff1615155b90505b919050565b80516000908015610e3a575050602001516fffffffffffffffffffffffffffffffff16151590565b610e72612bc9565b610e7a612c61565b610e82612c61565b8551608087015160208801516040517f0f47fab0000000000000000000000000000000000000000000000000000000008152610fe89392919073ffffffffffffffffffffffffffffffffffffffff841690630f47fab090610ee7908490600401613694565b60006040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3b9190810190612fb4565b8a5160208c01516040517f5d3c0ce800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691635d3c0ce891610f9391600401613694565b60206040518083038186803b158015610fab57600080fd5b505afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fe39190810190613025565b611c6f565b91509150610ff4612c35565b611002876080015187611c8e565b905061100c612c35565b61101a886080015187611c8e565b60208084015151908201515191925090611032612c61565b8a516040808d015190517f1eb1207600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691631eb120769161108e918e908e906004016136bd565b60206040518083038186803b1580156110a657600080fd5b505afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110de9190810190613025565b9050604051806101600160405280600081526020016111928d6000015173ffffffffffffffffffffffffffffffffffffffff166347d1b53c8f602001518f6040518363ffffffff1660e01b81526004016111399291906136a2565b604080518083038186803b15801561115057600080fd5b505afa158015611164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111889190810190613119565b8860400151611ca4565b81526020016112368d6000015173ffffffffffffffffffffffffffffffffffffffff166347d1b53c8f602001518e6040518363ffffffff1660e01b81526004016111dd9291906136a2565b604080518083038186803b1580156111f457600080fd5b505afa158015611208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061122c9190810190613119565b8760400151611ca4565b815260200188600001518152602001876000015181526020018281526020018b81526020018a815260200184815260200183815260200161128761127a8585611d59565b859063ffffffff61172616565b90529b9a5050505050505050505050565b60006112a78260400151611d72565b15905060006112b98360200151611d88565b1590508180156112c65750805b156112d257505061141f565b600082156112e25750600061132f565b81156112f05750600161132f565b610100840151602080860151015161130d9163ffffffff6116c916565b61014085015160408601516020015161132b9163ffffffff6116c916565b1190505b80156113ab5761133d612c74565b60408051808201825290860180515115158252610140870151610100880151915160209081015190840192611378929063ffffffff611d9f16565b81525090506113a585611398838860200151611dc990919063ffffffff16565b6113a0611e5b565b611e7b565b5061075a565b6113b3612c74565b6040518060400160405280866020015160000151151581526020016113f5876101000151886101400151896020015160200151611d9f9092919063ffffffff16565b9052905061141a85611405611e5b565b60408801516113a0908563ffffffff611dc916565b505050505b50565b61142f8160200151611d88565b1561143657fe5b6114438160400151611d72565b1561144a57fe5b6000611463826060015183608001518560600151611c44565b905080611474575060008152611596565b600061148883608001518560600151611d59565b905060006114a382856080015161172690919063ffffffff16565b905060006114be82866060015161214690919063ffffffff16565b60a08601515160608801515191925061151a9110157f4c697175696461746f7250726f787956310000000000000000000000000000007f4d696e206c697175696461746f7220726174696f20746f6f206c6f7700000000611bfa565b611522612c61565b604080516020810190915260a087015151606089015151829161154b919063ffffffff61214616565b90529050600061155b8383612188565b90506000611577886101200151836121a190919063ffffffff16565b885190915061158c908263ffffffff61172616565b8852505050505050505b5050565b6040805160028082526060828101909352829190816020015b6115bb612c74565b8152602001906001900390816115b35790505090508260200151816000815181106115e257fe5b60200260200101819052508260400151816001815181106115ff57fe5b602090810291909101015292915050565b604080516001808252818301909252606091829190816020015b611632612c8b565b81526020019060019003908161162a5750506040805161010081018252600681526000602080830182905283516080810185526001815294955091939284019291820190815260006020808301829052885160409384015292845260e08801518484015260c0880151848301526060840181905260016080850152815181815292830190915260a09092015282518391906115ff57fe5b6000826116d857506000611720565b828202828482816116e557fe5b041461171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011790613674565b90505b92915050565b60008282018381101561171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011790613664565b8461141a57611773846121e3565b7f3a2000000000000000000000000000000000000000000000000000000000000061179d856121e3565b7f203c0000000000000000000000000000000000000000000000000000000000006117c78661229d565b7f2c200000000000000000000000000000000000000000000000000000000000006117f18761229d565b60405161182997969594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001613589565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261011791600401613653565b8361075a57611877836121e3565b7f3a200000000000000000000000000000000000000000000000000000000000006118a1846121e3565b7f203c0000000000000000000000000000000000000000000000000000000000006118cb8561229d565b6040516118299594939291907f3e000000000000000000000000000000000000000000000000000000000000009060200161352b565b60606001610100830401604051908082528060200260200182016040528015611934578160200160208202803883390190505b5092915050565b6000805b8451811015611995576119658486838151811061195857fe5b60200260200101516123ac565b61198d576119868486838151811061197957fe5b60200260200101516123ea565b6001830192505b60010161193f565b50909392505050565b600060ff6fffffffffffffffffffffffffffffffff8316156119e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80016119e9565b608083901c92505b67ffffffffffffffff831615611a20577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001611a28565b604083901c92505b63ffffffff831615611a3d57601f1901611a45565b602083901c92505b61ffff831615611a76577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001611a7e565b601083901c92505b60ff831615611aae577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff801611ab6565b600883901c92505b600f831615611ae6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01611aee565b600483901c92505b6003831615611b1e577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611b26565b600283901c92505b6001831615610e3a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b610100919091020190565b6001901b191690565b8361075a57611b79836121e3565b7f3a20000000000000000000000000000000000000000000000000000000000000611ba3846121e3565b7f203c0000000000000000000000000000000000000000000000000000000000006118cb85612420565b611bd5612c61565b611bdd612c61565b611bec87878787600188612597565b915091509550959350505050565b82610e0e57611c08826121e3565b7f3a20000000000000000000000000000000000000000000000000000000000000611c32836121e3565b60405160200161182993929190613503565b600080611c518484611d59565b9050611c63848263ffffffff61172616565b90941015949350505050565b611c77612c61565b611c7f612c61565b611bec87878787600088612597565b611c96612c35565b61171d8360008551856127e9565b611cac612c74565b602083015183516fffffffffffffffffffffffffffffffff9091169015611d1a57604080518082019091526001815260208481015190820190611d0f9084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff6128eb16565b815250915050611720565b604080518082019091526000815283516020820190611d0f9084906dffffffffffffffffffffffffffff16670de0b6b3a764000063ffffffff6128eb16565b600061171d838360000151670de0b6b3a7640000611d9f565b80516000908015610e3a57505060200151151590565b8051600090158015610e3a57505060200151151590565b6000611dc182611db5868663ffffffff6116c916565b9063ffffffff6121a116565b949350505050565b611dd1612c74565b611dd9612c74565b8251845115159015151415611e0c5783511515815260208085015190840151611e029190611726565b602082015261171d565b8260200151846020015110611e355783511515815260208085015190840151611e029190612146565b82511515815260208084015190850151611e4f9190612146565b60208201529392505050565b611e63612c74565b50604080518082019091526000808252602082015290565b6000611e9d8461010001518560200151602001516116c990919063ffffffff16565b60208501515190915015611eff5760408051808201909152601281527f63616368652e68656c645765692e7369676e000000000000000000000000000060208201526060850151611ef591839063ffffffff61298816565b6060850152611f4f565b60408051808201909152601381527f2163616368652e68656c645765692e7369676e0000000000000000000000000060208201526080850151611f4991839063ffffffff61298816565b60808501525b6000611f6d85610100015185602001516116c990919063ffffffff16565b845190915015611f96576060850151611f8c908263ffffffff61172616565b6060860152611fb1565b6080850151611fab908263ffffffff61172616565b60808601525b6000611fd38661012001518760400151602001516116c990919063ffffffff16565b604087015151909150156120355760408051808201909152601281527f63616368652e6f7765645765692e7369676e00000000000000000000000000006020820152606087015161202b91839063ffffffff61298816565b6060870152612085565b60408051808201909152601381527f2163616368652e6f7765645765692e7369676e000000000000000000000000006020820152608087015161207f91839063ffffffff61298816565b60808701525b60006120a387610120015186602001516116c990919063ffffffff16565b8551909150156120cc5760608701516120c2908263ffffffff61172616565b60608801526120e7565b60808701516120e1908263ffffffff61172616565b60808801525b6120ef612c74565b6040880151612104908763ffffffff6129ce16565b905061210f81611d88565b1561211657fe5b6020810151885161212c9163ffffffff61172616565b885250505050602084019290925260409092019190915250565b600061171d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612988565b600061171d83670de0b6b3a76400008460000151611d9f565b600061171d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129e8565b606080826040516020016121f791906134ee565b60408051601f19818403018152919052905060205b80156122825781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019082908290811061224557fe5b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561227d5760010181529050610e3d565b61220c565b5060408051600080825260208201909252905b509392505050565b6060816122de575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610e3d565b8160005b81156122f657600101600a820491506122e2565b6060816040519080825280601f01601f191660200182016040528015612323576020820181803883390190505b508593509050815b80156123a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600a840660300160f81b82828151811061236957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8404935061232b565b50949350505050565b600080610100830490506000610100840690506000816001901b8684815181106123d257fe5b60209081029190910101511615159695505050505050565b815161010082049060ff8316906001821b9085908490811061240857fe5b60200260200101818151179150818152505050505050565b60408051602a808252606082810190935273ffffffffffffffffffffffffffffffffffffffff8416918391602082018180388339019050509050603060f81b8160008151811061246c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350607860f81b816001815181106124ad57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b601481101561229557600281026124f8600f8516612a39565b83826029038151811061250757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600484901c9350612549600f8516612a39565b83826028038151811061255857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505060049290921c916001016124df565b61259f612c61565b6125a7612c61565b8380156125b357508251155b935060005b85518110156127dd576125c9612c74565b8973ffffffffffffffffffffffffffffffffffffffff166347d1b53c898985815181106125f257fe5b60200260200101516040518363ffffffff1660e01b81526004016126179291906136a2565b604080518083038186803b15801561262e57600080fd5b505afa158015612642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126669190810190613119565b9050612670612c35565b61268d8a89858151811061268057fe5b6020026020010151611c8e565b9050612697612c74565b6126a5838360400151611ca4565b60208084015151908201519192506000916126c59163ffffffff6116c916565b90506126cf612c61565b6126d7612a5b565b90508915612786576127838e73ffffffffffffffffffffffffffffffffffffffff1663fd04b6068d898151811061270a57fe5b60200260200101516040518263ffffffff1660e01b815260040161272e91906136e5565b60206040518083038186803b15801561274657600080fd5b505afa15801561275a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061277e9190810190613025565b612a7d565b90505b8251156127af576127a861279a8383612188565b89519063ffffffff61172616565b88526127cd565b6127ca6127bc8383611d59565b88519063ffffffff61172616565b87525b50505050508060010190506125b8565b50965096945050505050565b6127f1612c35565b83830361286e8115801590612827575081600114158061282757508387878151811061281957fe5b602002602001015160000151145b7f4c697175696461746f7250726f787942617365000000000000000000000000007f4d61726b6574206e6f7420666f756e6400000000000000000000000000000000611bfa565b6000600182901c86019050600087828151811061288757fe5b6020026020010151600001519050808510156128b3576128a9888884886127e9565b9350505050611dc1565b808511156128ca576128a9888360010188886127e9565b8782815181106128d657fe5b60200260200101519350505050949350505050565b60008315806128f8575082155b1561290f576129086000836121a1565b9050610a05565b6000612921858563ffffffff6116c916565b905061297f61294c60016129406002611db5888463ffffffff61214616565b9063ffffffff61172616565b61295c838663ffffffff612ab416565b101561296957600061296c565b60015b60ff16612940838663ffffffff6121a116565b95945050505050565b600081848411156129c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101179190613653565b505050900390565b6129d6612c74565b61171d836129e384612af6565b611dc9565b60008183612a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101179190613653565b506000838581612a2f57fe5b0495945050505050565b6000600a821015612a5157506030810160f81b610e3d565b5060570160f81b90565b612a63612c61565b506040805160208101909152670de0b6b3a7640000815290565b612a85612c61565b604080516020810190915282518190612aac90670de0b6b3a764000063ffffffff61172616565b905292915050565b600061171d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612b1d565b612afe612c74565b5060408051808201909152815115815260208083015190820152919050565b60008183612b58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101179190613653565b50828481612b6257fe5b06949350505050565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001612b9b612c74565b8152602001612ba8612c74565b8152602001612bb5612c61565b815260200160608152602001606081525090565b60405180610160016040528060008152602001612be4612c74565b8152602001612bf1612c74565b81526020016000815260200160008152602001612c0c612c61565b815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806060016040528060008152602001612c4f612c61565b8152602001612c5c612cea565b905290565b6040518060200160405280600081525090565b604080518082019091526000808252602082015290565b604080516101008101825260008082526020820152908101612cab612d0a565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b604080516060810182526000808252602082018190529181019190915290565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b803561172081613896565b600082601f830112612d4f57600080fd5b8135612d62612d5d82613735565b61370e565b91508181835260208401935060208101905083856020840282011115612d8757600080fd5b60005b83811015612db35781612d9d8882612f93565b8452506020928301929190910190600101612d8a565b5050505092915050565b600082601f830112612dce57600080fd5b8151612ddc612d5d82613735565b91508181835260208401935060208101905083856020840282011115612e0157600080fd5b60005b83811015612db35781612e178882612f9e565b8452506020928301929190910190600101612e04565b8051611720816138aa565b8051611720816138b3565b600060208284031215612e5557600080fd5b612e5f602061370e565b90506000612e6d8484612f93565b82525092915050565b600060208284031215612e8857600080fd5b612e92602061370e565b90506000612e6d8484612f9e565b600060608284031215612eb257600080fd5b612ebc606061370e565b90506000612eca8484612f7d565b8252506020612edb84848301612f7d565b6020830152506040612eef84828501612fa9565b60408301525092915050565b600060408284031215612f0d57600080fd5b612f17604061370e565b90506000612f258484612d33565b8252506020612f3684848301612f93565b60208301525092915050565b600060408284031215612f5457600080fd5b612f5e604061370e565b90506000612f6c8484612e2d565b8252506020612f3684848301612f88565b8051611720816138c0565b8051611720816138c9565b8035611720816138d2565b8051611720816138d2565b8051611720816138db565b600060208284031215612fc657600080fd5b815167ffffffffffffffff811115612fdd57600080fd5b611dc184828501612dbd565b600060208284031215612ffb57600080fd5b6000611dc18484612e2d565b60006020828403121561301957600080fd5b6000611dc18484612e38565b60006020828403121561303757600080fd5b6000611dc18484612e76565b60006060828403121561305557600080fd5b6000611dc18484612ea0565b600080600080600080610100878903121561307b57600080fd5b60006130878989612efb565b965050604061309889828a01612efb565b95505060806130a989828a01612e43565b94505060a06130ba89828a01612f93565b93505060c087013567ffffffffffffffff8111156130d757600080fd5b6130e389828a01612d3e565b92505060e087013567ffffffffffffffff81111561310057600080fd5b61310c89828a01612d3e565b9150509295509295509295565b60006040828403121561312b57600080fd5b6000611dc18484612f42565b60006020828403121561314957600080fd5b6000611dc18484612f9e565b600061171d83836133d9565b600061316d83836134c5565b505060400190565b61317e81613824565b82525050565b61317e81613769565b60006131988261375c565b6131a28185613760565b9350836020820285016131b485613756565b8060005b858110156131ee57848403895281516131d18582613155565b94506131dc83613756565b60209a909a01999250506001016131b8565b5091979650505050505050565b60006132068261375c565b6132108185613760565b935061321b83613756565b8060005b838110156132495781516132338882613161565b975061323e83613756565b92505060010161321f565b509495945050505050565b61317e81613774565b61317e61326982613779565b6137c3565b61317e6132698261379e565b61317e613269826137c3565b60006132918261375c565b61329b8185610e3d565b93506132ab81856020860161384c565b9290920192915050565b60006132c08261375c565b6132ca8185613760565b93506132da81856020860161384c565b6132e381613878565b9093019392505050565b61317e8161382b565b61317e81613836565b61317e81613841565b6000613315601b83613760565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061334e602183613760565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006133ad601f83613760565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00815260200192915050565b80516000906101608401906133ee85826132f6565b50602083015161340160208601826134e5565b506040830151613414604086018261347b565b50606083015161342760c08601826134e5565b50608083015161343a60e08601826134e5565b5060a083015161344e610100860182613184565b5060c08301516134626101208601826134e5565b5060e083015184820361014086015261297f82826132b5565b8051608083019061348c8482613254565b50602082015161349f60208501826132ff565b5060408201516134b260408501826132ff565b50606082015161075a60608501826134e5565b805160408301906134d68482613184565b50602082015161075a60208501825b61317e816137c3565b60006134fa828461327a565b50602001919050565b600061350f8286613286565b915061351b828561326e565b60028201915061297f8284613286565b60006135378289613286565b9150613543828861326e565b6002820191506135538287613286565b915061355f828661326e565b60028201915061356f8285613286565b915061357b828461325d565b506001019695505050505050565b6000613595828b613286565b91506135a1828a61326e565b6002820191506135b18289613286565b91506135bd828861326e565b6002820191506135cd8287613286565b91506135d9828661326e565b6002820191506135e98285613286565b91506135f5828461325d565b5060010198975050505050505050565b604081016136138285613184565b610a056020830184613175565b6040808252810161363181856131fb565b90508181036020830152611dc1818461318d565b6020810161172082846132ed565b6020808252810161171d81846132b5565b60208082528101610e3a81613308565b60208082528101610e3a81613341565b60208082528101610e3a816133a0565b6040810161172082846134c5565b606081016136b082856134c5565b610a0560408301846134e5565b608081016136cb82866134c5565b6136d860408301856134e5565b611dc160608301846134e5565b6020810161172082846134e5565b6040810161370182856134e5565b610a056020830184613184565b60405181810167ffffffffffffffff8111828210171561372d57600080fd5b604052919050565b600067ffffffffffffffff82111561374c57600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b6000610e3a82613802565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b80610e3d81613882565b80610e3d8161388c565b6dffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b6000610e3a825b6000610e3a82613769565b6000610e3a826137c6565b6000610e3a826137d0565b60005b8381101561386757818101518382015260200161384f565b8381111561075a5750506000910152565b601f01601f191690565b6009811061141f57fe5b6002811061141f57fe5b61389f81613769565b811461141f57600080fd5b61389f81613774565b6003811061141f57600080fd5b61389f816137da565b61389f816137ed565b61389f816137c3565b61389f8161381b56fea365627a7a723158208ffab257163a42312e60756b8d60e796c0ca03dd8ad2317a6f0853e47da099c76c6578706572696d656e74616cf564736f6c63430005100040",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806315c14a4a146100515780639a8a05921461006f578063c29a4b7114610084578063cf530f8814610099575b600080fd5b6100596100a1565b6040516100669190613645565b60405180910390f35b6100776100bd565b60405161006691906136e5565b610097610092366004613061565b6100c3565b005b610059610611565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60005474010000000000000000000000000000000000000000900460ff16610120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011790613684565b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055816101528161062d565b8161015c8161062d565b610164612b6b565b60005473ffffffffffffffffffffffffffffffffffffffff16808252602082018a905260408083018a905260608301899052517f0f47fab0000000000000000000000000000000000000000000000000000000008152630f47fab0906101ce908b90600401613694565b60006040518083038186803b1580156101e657600080fd5b505afa1580156101fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102229190810190612fb4565b60a082015280516040517f0f47fab00000000000000000000000000000000000000000000000000000000081526102de919073ffffffffffffffffffffffffffffffffffffffff821690630f47fab090610280908e90600401613694565b60006040518083038186803b15801561029857600080fd5b505afa1580156102ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102d49190810190612fb4565b8360a00151610760565b60808201526102ec81610a0c565b6000805b865181101561057557600087828151811061030757fe5b6020026020010151905060005b875181101561056b57600088828151811061032b57fe5b60200260200101519050828114156103435750610563565b6103d9866000015173ffffffffffffffffffffffffffffffffffffffff166347d1b53c8f866040518363ffffffff1660e01b81526004016103859291906136a2565b604080518083038186803b15801561039c57600080fd5b505afa1580156103b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506103d49190810190613119565b610e13565b6103e3575061056b565b610479866000015173ffffffffffffffffffffffffffffffffffffffff166347d1b53c8f846040518363ffffffff1660e01b81526004016104259291906136a2565b604080518083038186803b15801561043c57600080fd5b505afa158015610450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104749190810190613119565b610e42565b6104835750610563565b61048b612bc9565b610496878386610e6a565b90506104a181611298565b6104ab8782611422565b80516104b8575050610563565b865173ffffffffffffffffffffffffffffffffffffffff1663a67a6a456104de8961159a565b6104e784611610565b6040518363ffffffff1660e01b8152600401610504929190613620565b600060405180830381600087803b15801561051e57600080fd5b505af1158015610532573d6000803e3d6000fd5b505050610120820151825161055e92506105519163ffffffff6116c916565b879063ffffffff61172616565b955050505b600101610314565b50506001016102f0565b506105c6878210157f4c697175696461746f7250726f787956310000000000000000000000000000007f4e6f7420656e6f756768206c6971756964617461626c652076616c7565000000848b611765565b5050600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790555050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b600154815173ffffffffffffffffffffffffffffffffffffffff9091169060005b8181101561075a576107528373ffffffffffffffffffffffffffffffffffffffff1663d9f4760186848151811061068157fe5b6020026020010151306040518363ffffffff1660e01b81526004016106a79291906136f3565b60206040518083038186803b1580156106bf57600080fd5b505afa1580156106d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682