diff --git a/KyberReserves.md b/KyberReserves.md index cdef72c..8f48d1a 100644 --- a/KyberReserves.md +++ b/KyberReserves.md @@ -1,16 +1,23 @@ # Kyber Reserves +There are 3 diffrent prefixes of reserve ids: +- `0xAA` for [Automated Price Reserve](https://developer.kyber.network/docs/Reserves-AutomatedPriceReserve/) +- `0xFF` for [Fed Price Reserve](https://developer.kyber.network/docs/Reserves-FedPriceReserve/) +- `0xBB` for Bridged Price Reserves + ## Multiple token reserves - Reserve 1 [`0x63825c174ab367968EC60f061753D3bbD36A0D8F`](https://etherscan.io/address/0x63825c174ab367968EC60f061753D3bbD36A0D8F) (Reserve Id: `0xff4b796265722046707200000000000000000000000000000000000000000000`) - Reserve 2 [`0x7a3370075a54B187d7bD5DceBf0ff2B5552d4F7D`](https://etherscan.io/address/0x7a3370075a54B187d7bD5DceBf0ff2B5552d4F7D) (Reserve Id: `0xffabcd0000000000000000000000000000000000000000000000000000000000`) - Reserve 3 [`0x4f32BbE8dFc9efD54345Fc936f9fEF1048746fCF`](https://etherscan.io/address/0x4f32BbE8dFc9efD54345Fc936f9fEF1048746fCF) (Reserve Id: `0xff4f6e65426974205175616e7400000000000000000000000000000000000000`) -## Bridge Reserves +## Bridged Reserves - Oasis (Eth2Dai) [`0x1E158c0e93c30d24e918Ef83d1e0bE23595C3c0f`](https://etherscan.io/address/0x1E158c0e93c30d24e918Ef83d1e0bE23595C3c0f) (Reserve Id: `0xbb4f617369730000000000000000000000000000000000000000000000000000`) - Uniswap [`0x31E085Afd48a1d6e51Cc193153d625e8f0514C7F`](https://etherscan.io/address/0x31E085Afd48a1d6e51Cc193153d625e8f0514C7F) (Reserve Id: `0xbb756e6973776170563100000000000000000000000000000000000000000000`) - Uniswap V2 [`0x10908C875D865C66f271F5d3949848971c9595C9`](https://etherscan.io/address/0x10908C875D865C66f271F5d3949848971c9595C9) (Reserve Id: `0xbb756e6973776170563200000000000000000000000000000000000000000000`) +- Bancor Token Reserve [`1fE867bFE9cbE0045467605B959A355223E3885D`](https://etherscan.io/address/0x1fE867bFE9cbE0045467605B959A355223E3885D) (ReserveId: `0xbb42414e434f5230305632000000000000000000000000000000000000000000`) + ## Single token reserves @@ -32,7 +39,6 @@ - [SPIKE](https://etherscan.io/address/0xA7fC5D2453E3F68aF0cc1B78bcFEe94A1B293650) Token Reserve [`8ea5CF9f61824E8A3cA8AA370AB37e0202B2CC7D`](https://etherscan.io/address/0x8ea5CF9f61824E8A3cA8AA370AB37e0202B2CC7D) (ReserveId: `0xaa88888888888888888888888888888888888888888888888888888888888888`) - [SAN](https://etherscan.io/address/0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098) Token Reserve [`a9742Ee9a5407f4C2f8a49f65E3a440f3694960a`](https://etherscan.io/address/0xa9742Ee9a5407f4C2f8a49f65E3a440f3694960a) (ReserveId: `0xaa53414e20415052000000000000000000000000000000000000000000000000`) - [KNC](https://etherscan.io/address/0xdd974D5C2e2928deA5F71b9825b8b646686BD200) Token Reserve [`607d7751d9F4845C5a1dE9eeD39c56f4fC0F855d`](https://etherscan.io/address/0x607d7751d9F4845C5a1dE9eeD39c56f4fC0F855d) (ReserveId: `0xaa4b4e435f4d4547414c41444f4e000000000000000000000000000000000000`) -- [BNT](https://etherscan.io/address/0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C) Token Reserve [`1fE867bFE9cbE0045467605B959A355223E3885D`](https://etherscan.io/address/0x1fE867bFE9cbE0045467605B959A355223E3885D) (ReserveId: `0xbb42414e434f5230305632000000000000000000000000000000000000000000`) - [EKG](https://etherscan.io/address/0x6A9b3E36436B7abde8C4E2E2a98Ea40455E615cf) Token Reserve [`4e6d0F492fd139151DE4728caC47dAce56C56Af4`](https://etherscan.io/address/0x4e6d0F492fd139151DE4728caC47dAce56C56Af4) (ReserveId: `0xff454b4700000000000000000000000000000000000000000000000000000000`) - [ANT](https://etherscan.io/address/0x960b236A07cf122663c4303350609A66A7B288C0) Token Reserve [`0994c18Ed0C328F38d2C451B2a2e1cEb1Ae6A812`](https://etherscan.io/address/0x0994c18Ed0C328F38d2C451B2a2e1cEb1Ae6A812) (ReserveId: `0xaa414e5400000000000000000000000000000000000000000000000000000000`) - [GDC](https://etherscan.io/address/0x301C755bA0fcA00B1923768Fffb3Df7f4E63aF31) Token Reserve [`2485a4e3Dd95a3Ef445B786acf7bacc5C99986F7`](https://etherscan.io/address/0x2485a4e3Dd95a3Ef445B786acf7bacc5C99986F7) (ReserveId: `0xaa676463746f6b656e0000000000000000000000000000000000000000000000`) diff --git a/OneSplit.full.bin b/OneSplit.full.bin index dffed04..a247804 100644 --- a/OneSplit.full.bin +++ b/OneSplit.full.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b50604051620053ef380380620053ef8339818101604052602081101561003557600080fd5b5051600080546001600160a01b039092166001600160a01b031990921691909117905561538780620000686000396000f3fe60806040526004361061003f5760003560e01c8063085e2c5b1461004e5780638373f265146100f8578063e2a7515e146101af578063fbe4ed9514610289575b3332141561004c57600080fd5b005b34801561005a57600080fd5b5061009d600480360360a081101561007157600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608001356102ba565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156100e35781810151838201526020016100cb565b50505050905001935050505060405180910390f35b34801561010457600080fd5b5061014d600480360360c081101561011b57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a001356102dd565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610199578181015183820152602001610181565b5050505090500194505050505060405180910390f35b610277600480360360c08110156101c557600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561020457600080fd5b82018360208201111561021657600080fd5b803590602001918460208302840111600160201b8311171561023757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610434915050565b60408051918252519081900360200190f35b34801561029557600080fd5b5061029e6107f5565b604080516001600160a01b039092168252519081900360200190f35b600060606102cd878787878760006102dd565b9199919850909650505050505050565b6000805460408051638373f26560e01b81526001600160a01b038a81166004830152898116602483015260448201899052606482018890526084820187905260a48201869052915184936060931691638373f2659160c48083019287929190829003018186803b15801561035057600080fd5b505afa158015610364573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052606081101561038d57600080fd5b81516020830151604080850180519151939592948301929184600160201b8211156103b757600080fd5b9083019060208201858111156103cc57600080fd5b82518660208202830111600160201b821117156103e857600080fd5b82525081516020918201928201910280838360005b838110156104155781810151838201526020016103fd565b5050505090500160405250505092509250925096509650969350505050565b6000856001600160a01b0316876001600160a01b031614156104575750836107eb565b61045f615195565b604051806103e001604052806108048152602001610a908152602001610add8152602001610e2381526020016110ec8152602001611282815260200161145e815260200161168e81526020016118c88152602001611b028152602001611cad8152602001611ed581526020016121338152602001612288815260200161229481526020016122af81526020016122ca81526020016122e5815260200161251f81526020016126ac81526020016128a0815260200161294c8152602001612a238152602001612ac28152602001612cb68152602001612cc48152602001612cd28152602001612ce08152602001612cfd8152602001612d138152602001612d408152509050601f845111156105a45760405162461bcd60e51b81526004018080602001828103825260428152602001806153116042913960600191505060405180910390fd5b600080805b86518110156106025760008782815181106105c057fe5b602002602001015111156105fa576105f48782815181106105dd57fe5b602002602001015184612d5690919063ffffffff16565b92508091505b6001016105a9565b50816106625761061a8a6001600160a01b0316612db9565b156106575760405133903480156108fc02916000818181858888f1935050505015801561064b573d6000803e3d6000fd5b503493505050506107eb565b8793505050506107eb565b61067d6001600160a01b038b1633308b63ffffffff612df516565b60006106986001600160a01b038c163063ffffffff612f0716565b905060005b875181101561073b578781815181106106b257fe5b6020026020010151600014156106c757610733565b60006106ff856106f38b85815181106106dc57fe5b60200260200101518e612fb190919063ffffffff16565b9063ffffffff61300a16565b90508382141561070c5750815b80830392506107318d8d838b8a87601f811061072457fe5b602002015163ffffffff16565b505b60010161069d565b506107556001600160a01b038b163063ffffffff612f0716565b9450878510156107965760405162461bcd60e51b815260040180806020018281038252602681526020018061528b6026913960400191505060405180910390fd5b6107b06001600160a01b038b16338763ffffffff61304c16565b506107e5336107ce6001600160a01b038e163063ffffffff612f0716565b6001600160a01b038e16919063ffffffff61304c16565b50505050505b9695505050505050565b6000546001600160a01b031681565b816108176001600160a01b038616612db9565b61095757604080516303795fb160e11b81526001600160a01b0387166004820152905160009173c0a47dfe034b400b47bdad5fecda2621de6c4d95916306f2bf6291602480820192602092909190829003018186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d60208110156108a357600080fd5b505190506001600160a01b03811615610955576108d06001600160a01b038716828463ffffffff6130ca16565b604080516395e3c50b60e01b8152600481018490526001602482015242604482015290516001600160a01b038316916395e3c50b9160648083019260209291908290030181600087803b15801561092657600080fd5b505af115801561093a573d6000803e3d6000fd5b505050506040513d602081101561095057600080fd5b505191505b505b610969846001600160a01b0316612db9565b610a8957604080516303795fb160e11b81526001600160a01b0386166004820152905160009173c0a47dfe034b400b47bdad5fecda2621de6c4d95916306f2bf6291602480820192602092909190829003018186803b1580156109cb57600080fd5b505afa1580156109df573d6000803e3d6000fd5b505050506040513d60208110156109f557600080fd5b505190506001600160a01b03811615610a8757806001600160a01b031663f39b5b9b836001426040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b158015610a5757600080fd5b505af1158015610a6b573d6000803e3d6000fd5b50505050506040513d6020811015610a8257600080fd5b505191505b505b5050505050565b6040805162461bcd60e51b815260206004820152601a60248201527f5468697320736f75726365207761732064657072656361746564000000000000604482015290519081900360640190fd5b60007352ae12abe5d8bd778bd5397f99ca900624cfadd46001600160a01b031663bb34534c6040518163ffffffff1660e01b815260040180806c42616e636f724e6574776f726b60981b815250602001905060206040518083038186803b158015610b4757600080fd5b505afa158015610b5b573d6000803e3d6000fd5b505050506040513d6020811015610b7157600080fd5b505190506060736f0cd8c4f6f06eab664c7e3031909452b4b728616375e1cc82610ba36001600160a01b038916612db9565b610bad5787610bc3565b73c0829421c1d260bd3cb3e0f06cfe2d52db2ce3155b610bd5886001600160a01b0316612db9565b610bdf5787610bf5565b73c0829421c1d260bd3cb3e0f06cfe2d52db2ce3155b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060006040518083038186803b158015610c5457600080fd5b505afa158015610c68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610c9157600080fd5b8101908080516040519392919084600160201b821115610cb057600080fd5b908301906020820185811115610cc557600080fd5b82518660208202830111600160201b82111715610ce157600080fd5b82525081516020918201928201910280838360005b83811015610d0e578181015183820152602001610cf6565b505050509050016040525050509050610d3b8285886001600160a01b03166130ca9092919063ffffffff16565b816001600160a01b031663f3898a97610d5c886001600160a01b0316612db9565b610d67576000610d69565b855b838760016040518563ffffffff1660e01b81526004018080602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610dc8578181015183820152602001610db0565b505050509050019450505050506020604051808303818588803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50505050506040513d6020811015610e1957600080fd5b5050505050505050565b610e35846001600160a01b0316612db9565b15610e9d576000805160206151df8339815191526001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b50505050505b6000610eb1856001600160a01b0316612db9565b610ebb5784610ecb565b6000805160206151df8339815191525b9050610efb6001600160a01b03821673794e6e91555438afc3ccf1c5076a74f42133d08d8563ffffffff6130ca16565b73794e6e91555438afc3ccf1c5076a74f42133d08d630621b4f6610f276001600160a01b038816612db9565b610f315786610f41565b6000805160206151df8339815191525b85610f54886001600160a01b0316612db9565b610f5e5787610f6e565b6000805160206151df8339815191525b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015260248101939093529216604482015260016064820152905160848083019260209291908290030181600087803b158015610fcc57600080fd5b505af1158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b5061100b90506001600160a01b038516612db9565b15610a8957604080516370a0823160e01b815230600482015290516000805160206151df83398151915291632e1a7d4d9183916370a08231916024808301926020929190829003018186803b15801561106357600080fd5b505afa158015611077573d6000803e3d6000fd5b505050506040513d602081101561108d57600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b505050505050505050565b60006001600160a01b03851660008051602061526b83398151915214611113576000611116565b60025b6001600160a01b0386166000805160206151ff8339815191521461113b57600061113e565b60015b0160ff169050600060008051602061526b8339815191526001600160a01b0386161461116b57600061116e565b60025b6001600160a01b0386166000805160206151ff83398151915214611193576000611196565b60015b0160ff16905081600f0b600014806111b1575080600f0b6000145b156111bd57505061127c565b6111eb6001600160a01b03871673a2b47e3d5c44877cca798226b7b8118f9bfb7a568663ffffffff6130ca16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b602482015260448101869052600060648201819052915173a2b47e3d5c44877cca798226b7b8118f9bfb7a569263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b505af1158015611275573d6000803e3d6000fd5b5050505050505b50505050565b60006001600160a01b03851673dac17f958d2ee523a2206206994597c13d831ec7146112af5760006112b2565b60035b6001600160a01b03861660008051602061526b833981519152146112d75760006112da565b60025b6001600160a01b0387166000805160206151ff833981519152146112ff576000611302565b60015b010160ff169050600073dac17f958d2ee523a2206206994597c13d831ec76001600160a01b0316856001600160a01b03161461133f576000611342565b60035b6001600160a01b03861660008051602061526b8339815191521461136757600061136a565b60025b6001600160a01b0387166000805160206151ff8339815191521461138f576000611392565b60015b010160ff16905081600f0b600014806113ae575080600f0b6000145b156113ba57505061127c565b6113e86001600160a01b0387167352ea46506b9cc5ef470c5bf89f17dc28bb35d85c8663ffffffff6130ca16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517352ea46506b9cc5ef470c5bf89f17dc28bb35d85c9263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b0385166e085d4780b73119b644ae5ecd22b37614611486576000611489565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146114b45760006114b7565b60035b6001600160a01b03871660008051602061526b833981519152146114dc5760006114df565b60025b6001600160a01b0388166000805160206151ff83398151915214611504576000611507565b60015b01010160ff16905060006e085d4780b73119b644ae5ecd22b3766001600160a01b0316856001600160a01b031614611540576000611543565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec71461156e576000611571565b60035b6001600160a01b03871660008051602061526b83398151915214611596576000611599565b60025b6001600160a01b0388166000805160206151ff833981519152146115be5760006115c1565b60015b01010160ff16905081600f0b600014806115de575080600f0b6000145b156115ea57505061127c565b6116186001600160a01b0387167345f783cce6b7ff23b2ab2d70e416cdb7d6055f518663ffffffff6130ca16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517345f783cce6b7ff23b2ab2d70e416cdb7d6055f519263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b038516734fabb145d64652a948d72533023f6e7a623c7c53146116bb5760006116be565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146116e95760006116ec565b60035b6001600160a01b03871660008051602061526b83398151915214611711576000611714565b60025b6001600160a01b0388166000805160206151ff8339815191521461173957600061173c565b60015b01010160ff1690506000734fabb145d64652a948d72533023f6e7a623c7c536001600160a01b0316856001600160a01b03161461177a57600061177d565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146117a85760006117ab565b60035b6001600160a01b03871660008051602061526b833981519152146117d05760006117d3565b60025b6001600160a01b0388166000805160206151ff833981519152146117f85760006117fb565b60015b01010160ff16905081600f0b60001480611818575080600f0b6000145b1561182457505061127c565b6118526001600160a01b0387167379a8c46dea5ada233abaffd40f3a0a2b1e5a4f278663ffffffff6130ca16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517379a8c46dea5ada233abaffd40f3a0a2b1e5a4f279263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b0385167357ab1ec28d129707052df4df418d58a2d46d5f51146118f55760006118f8565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec714611923576000611926565b60035b6001600160a01b03871660008051602061526b8339815191521461194b57600061194e565b60025b6001600160a01b0388166000805160206151ff83398151915214611973576000611976565b60015b01010160ff16905060007357ab1ec28d129707052df4df418d58a2d46d5f516001600160a01b0316856001600160a01b0316146119b45760006119b7565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146119e25760006119e5565b60035b6001600160a01b03871660008051602061526b83398151915214611a0a576000611a0d565b60025b6001600160a01b0388166000805160206151ff83398151915214611a32576000611a35565b60015b01010160ff16905081600f0b60001480611a52575080600f0b6000145b15611a5e57505061127c565b611a8c6001600160a01b03871673a5407eae9ba41422680e2e00537571bcc53efbfd8663ffffffff6130ca16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b602482015260448101869052600060648201819052915173a5407eae9ba41422680e2e00537571bcc53efbfd9263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b611b14846001600160a01b0316612db9565b611bdc576000611b23856131c3565b9050611b3f6001600160a01b038616828563ffffffff6130ca16565b806001600160a01b031663a0712d68846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611b8557600080fd5b505af1158015611b99573d6000803e3d6000fd5b505050506040513d6020811015611baf57600080fd5b50611bd690508185611bd06001600160a01b0383163063ffffffff612f0716565b85610804565b5061127c565b611bee836001600160a01b0316612db9565b61127c576000611bfd846131c3565b9050611c0b85828585610804565b6001600160a01b03811663db006a75611c2a823063ffffffff612f0716565b6040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b505050506040513d6020811015611c8a57600080fd5b50611ca690506001600160a01b0385163063ffffffff612f0716565b505061127c565b6001600160a01b0384166000805160206151ff8339815191521415611da257611cfa6001600160a01b0385167306af07097c9eeb7fd685c692751d5c66db49c2158463ffffffff6130ca16565b60408051633b4da69f60e01b81523060048201526024810184905290517306af07097c9eeb7fd685c692751d5c66db49c21591633b4da69f91604480830192600092919082900301818387803b158015611d5357600080fd5b505af1158015611d67573d6000803e3d6000fd5b50611d9d92507306af07097c9eeb7fd685c692751d5c66db49c2159150859050611d97823063ffffffff612f0716565b84610804565b61127c565b6001600160a01b0383166000805160206151ff833981519152141561127c57611de1847306af07097c9eeb7fd685c692751d5c66db49c2158484610804565b604080516370a0823160e01b8152306004820181905291517306af07097c9eeb7fd685c692751d5c66db49c2159263ef693bed92909184916370a08231916024808301926020929190829003018186803b158015611e3e57600080fd5b505afa158015611e52573d6000803e3d6000fd5b505050506040513d6020811015611e6857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015611eb857600080fd5b505af1158015611ecc573d6000803e3d6000fd5b5050505061127c565b611ee7846001600160a01b0316612db9565b61202e576000611ef6856133b3565b9050611f8b73398ec7346dcd622edc5ae82352f02be94c62d1196001600160a01b031663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b50516001600160a01b038716908563ffffffff6130ca16565b60408051636968703360e11b81526001600160a01b03871660048201526024810185905261044d6044820152905173398ec7346dcd622edc5ae82352f02be94c62d1199163d2d0e06691606480830192600092919082900301818387803b158015611ff557600080fd5b505af1158015612009573d6000803e3d6000fd5b50505050611bd68185611bd030856001600160a01b0316612f0790919063ffffffff16565b612040836001600160a01b0316612db9565b61127c57600061204f846133b3565b905061205d85828585610804565b604080516370a0823160e01b815230600482015290516001600160a01b0383169163db006a759183916370a08231916024808301926020929190829003018186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d60208110156120d557600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050505061127c565b6000737079e8517594e5b21d2b9a0d17cb33f5fe2bca706001600160a01b031663d4b839926040518163ffffffff1660e01b815260040160206040518083038186803b15801561218257600080fd5b505afa158015612196573d6000803e3d6000fd5b505050506040513d60208110156121ac57600080fd5b505190506121ca6001600160a01b038616828563ffffffff6130ca16565b806001600160a01b031663fe0291566121eb876001600160a01b0316612db9565b6121f65760006121f8565b845b604080516001600160e01b031960e085901b1681526001600160a01b03808b1660048301528916602482015260448101889052600060648201529051608480830192602092919082900301818588803b15801561225457600080fd5b505af1158015612268573d6000803e3d6000fd5b50505050506040513d602081101561227f57600080fd5b50505050505050565b610a89848484846137d6565b61127c846000805160206151df833981519152858585613b88565b61127c846000805160206151ff833981519152858585613b88565b61127c8460008051602061526b833981519152858585613b88565b60006001600160a01b038516738e870d67f660d95d5be530380d0ec0bd388289e114612312576000612315565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec714612340576000612343565b60035b6001600160a01b03871660008051602061526b8339815191521461236857600061236b565b60025b6001600160a01b0388166000805160206151ff83398151915214612390576000612393565b60015b01010160ff1690506000738e870d67f660d95d5be530380d0ec0bd388289e16001600160a01b0316856001600160a01b0316146123d15760006123d4565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146123ff576000612402565b60035b6001600160a01b03871660008051602061526b8339815191521461242757600061242a565b60025b6001600160a01b0388166000805160206151ff8339815191521461244f576000612452565b60015b01010160ff16905081600f0b6000148061246f575080600f0b6000145b1561247b57505061127c565b6124a96001600160a01b0387167306364f10b501e868329afbc005b3492902d6c7638663ffffffff6130ca16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517306364f10b501e868329afbc005b3492902d6c7639263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b038516732260fac5e5542a773aa44fbcfedf7c193bc2c5991461254c57600061254f565b60025b6001600160a01b03861673eb4c2781e4eba804ce9a9803c67d0893436bb27d1461257a57600061257d565b60015b0160ff1690506000732260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b038616146125b05760006125b3565b60025b6001600160a01b03861673eb4c2781e4eba804ce9a9803c67d0893436bb27d146125de5760006125e1565b60015b0160ff16905081600f0b600014806125fc575080600f0b6000145b1561260857505061127c565b6126366001600160a01b0387167393054188d876f558f4a66b2ef1d97d16edf0895b8663ffffffff6130ca16565b60408051630f7c084960e21b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517393054188d876f558f4a66b2ef1d97d16edf0895b92633df02124926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b038516730316eb71485b0ab14103307bf65a021042c6d380146126d95760006126dc565b60035b6001600160a01b038616732260fac5e5542a773aa44fbcfedf7c193bc2c5991461270757600061270a565b60025b6001600160a01b038716731bbe271d15bb64df0bc6cd28df9ff322f2ebd84714612735576000612738565b60015b010160ff1690506000730316eb71485b0ab14103307bf65a021042c6d3806001600160a01b0316856001600160a01b031614612775576000612778565b60035b6001600160a01b038616732260fac5e5542a773aa44fbcfedf7c193bc2c599146127a35760006127a6565b60025b6001600160a01b038716731bbe271d15bb64df0bc6cd28df9ff322f2ebd847146127d15760006127d4565b60015b010160ff16905081600f0b600014806127f0575080600f0b6000145b156127fc57505061127c565b61282a6001600160a01b038716739726e9314ef1b96e45f40056bed61a088897313e8663ffffffff6130ca16565b60408051630f7c084960e21b8152600019808501600f90810b810b6004840152908401810b900b6024820152604481018690526000606482018190529151739726e9314ef1b96e45f40056bed61a088897313e92633df02124926084808201939182900301818387803b15801561126157600080fd5b6128ce6001600160a01b0385167303ef3f37856bd08eb47e2de7abc4ddd2c19b60f28463ffffffff6130ca16565b60408051630df791e560e41b81526001600160a01b038681166004830152851660248201526044810184905290517303ef3f37856bd08eb47e2de7abc4ddd2c19b60f29163df791e5091606480830192600092919082900301818387803b15801561293857600080fd5b505af1158015610e19573d6000803e3d6000fd5b61297a6001600160a01b03851673a8253a440be331dc4a7395b73948cca6f19dc97d8463ffffffff6130ca16565b604080516303ff4c0160e31b81526001600160a01b0386811660048301528516602482015260448101849052600060648201819052603242016084830152915173a8253a440be331dc4a7395b73948cca6f19dc97d92631ffa60089260a480820193602093909283900390910190829087803b1580156129f957600080fd5b505af1158015612a0d573d6000803e3d6000fd5b505050506040513d6020811015610a8757600080fd5b612a516001600160a01b03851673e2f2a5c287993345a840db3b0845fbc70f5935a58463ffffffff6130ca16565b60408051631ba0488760e21b81526001600160a01b0386811660048301528516602482015260448101849052306064820152905173e2f2a5c287993345a840db3b0845fbc70f5935a591636e81221c9160848083019260209291908290030181600087803b1580156129f957600080fd5b60006001600160a01b03851673fe18be6b3bd88a2d2a7f928d00292e7a9963cfc614612aef576000612af2565b60035b6001600160a01b038616732260fac5e5542a773aa44fbcfedf7c193bc2c59914612b1d576000612b20565b60025b6001600160a01b03871673eb4c2781e4eba804ce9a9803c67d0893436bb27d14612b4b576000612b4e565b60015b010160ff169050600073fe18be6b3bd88a2d2a7f928d00292e7a9963cfc66001600160a01b0316856001600160a01b031614612b8b576000612b8e565b60035b6001600160a01b038616732260fac5e5542a773aa44fbcfedf7c193bc2c59914612bb9576000612bbc565b60025b6001600160a01b03871673eb4c2781e4eba804ce9a9803c67d0893436bb27d14612be7576000612bea565b60015b010160ff16905081600f0b60001480612c06575080600f0b6000145b15612c1257505061127c565b612c406001600160a01b038716737fc77b5c7614e1533320ea6ddc2eb61fa00a97148663ffffffff6130ca16565b60408051630f7c084960e21b8152600019808501600f90810b810b6004840152908401810b900b6024820152604481018690526000606482018190529151737fc77b5c7614e1533320ea6ddc2eb61fa00a971492633df02124926084808201939182900301818387803b15801561126157600080fd5b61127c848484846000613b9f565b61127c848484846001613b9f565b61127c848484846002613b9f565b61127c848484846001685a434ecd46efdcc7c760b11b0319614010565b61127c84848484600161543360e81b0319614010565b61127c848484847fff4f6e65426974205175616e7400000000000000000000000000000000000000614010565b61127c84848484612d51898961486a565b614010565b600082820183811015612db0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006001600160a01b0382161580612ded57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b90505b919050565b80612dff5761127c565b612e0884612db9565b15612eec576001600160a01b03831633148015612e255750803410155b612e605760405162461bcd60e51b815260040180806020018281038252602b81526020018061521f602b913960400191505060405180910390fd5b6001600160a01b0382163014612ea8576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612ea6573d6000803e3d6000fd5b505b80341115611d9d57336108fc612ec4348463ffffffff614be716565b6040518115909202916000818181858888f19350505050158015611bd6573d6000803e3d6000fd5b61127c6001600160a01b03851684848463ffffffff614c2916565b6000612f1283612db9565b15612f2857506001600160a01b03811631612db3565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612f7e57600080fd5b505afa158015612f92573d6000803e3d6000fd5b505050506040513d6020811015612fa857600080fd5b50519050612db3565b600082612fc057506000612db3565b82820282848281612fcd57fe5b0414612db05760405162461bcd60e51b815260040180806020018281038252602181526020018061524a6021913960400191505060405180910390fd5b6000612db083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c83565b60008161305b575060016130c3565b61306484612db9565b156130a5576040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015801561309f573d6000803e3d6000fd5b506130c3565b6130bf6001600160a01b038516848463ffffffff614d2516565b5060015b9392505050565b6130d383612db9565b6131be57806130fc576130f76001600160a01b03841683600063ffffffff614d7716565b6131be565b60408051636eb1769f60e11b81523060048201526001600160a01b038481166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b15801561314d57600080fd5b505afa158015613161573d6000803e3d6000fd5b505050506040513d602081101561317757600080fd5b505190508181101561127c5780156131a4576131a46001600160a01b03851684600063ffffffff614d7716565b61127c6001600160a01b038516848463ffffffff614d7716565b505050565b60006131d7826001600160a01b0316612db9565b156131f75750734ddc2d193948926d02f9b1fe9e1daa0718270ed5612df0565b6001600160a01b0382166000805160206151ff83398151915214156132315750735d3a536e4d6dbd6114cc1ead35777bab948e3643612df0565b6001600160a01b038216730d8775f648430679a709e98d2b0cb6250d2887ef14156132715750736c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e612df0565b6001600160a01b038216731985365e9f78359a9b6ad760e32412f4a445e86214156132b1575073158079ee67fce2f58472a96584a73c7ab9ac95c1612df0565b6001600160a01b03821660008051602061526b83398151915214156132eb57507339aa39c021dfbae8fac545936693ac917d5e7563612df0565b6001600160a01b038216732260fac5e5542a773aa44fbcfedf7c193bc2c599141561332b575073c11b1268c1a384e55c48c2391d8d480264a3a7f4612df0565b6001600160a01b03821673e41d2489571d322189246dafa5ebde1f4699f498141561336b575073b3319f5d18bc0d84dd1b4825dcde5d5f7266d407612df0565b6001600160a01b03821673dac17f958d2ee523a2206206994597c13d831ec714156133ab575073f650c3d88d12db855b8bf7d11be6c55a4e07dcc9612df0565b506000919050565b60006133c7826001600160a01b0316612db9565b156133e75750733a3a65aab0dd2a17e3f1947ba16138cd37d08c04612df0565b6001600160a01b0382166000805160206151ff8339815191521415613421575073fc1e690f61efd961294b3e1ce3313fbd8aa4f85d612df0565b6001600160a01b03821660008051602061526b833981519152141561345b5750739ba00d6856a4edf4665bca2c2309936572473b7e612df0565b6001600160a01b0382167357ab1ec28d129707052df4df418d58a2d46d5f51141561349b575073625ae63000f46200499120b906716420bd059240612df0565b6001600160a01b038216734fabb145d64652a948d72533023f6e7a623c7c5314156134db5750736ee0f7bb50a54ab5253da0667b0dc2ee526c30a8612df0565b6001600160a01b0382166e085d4780b73119b644ae5ecd22b37614156135165750734da9b813057d04baef4e5800e36083717b4a0341612df0565b6001600160a01b03821673dac17f958d2ee523a2206206994597c13d831ec7141561355657507371fc860f7d3a592a4a98740e39db31d25db65ae8612df0565b6001600160a01b038216730d8775f648430679a709e98d2b0cb6250d2887ef1415613596575073e1ba0fb44ccb0d11b80f92f4f8ed94ca3ff51d00612df0565b6001600160a01b03821673dd974d5c2e2928dea5f71b9825b8b646686bd20014156135d65750739d91be44c06d373a8a226e1f3b146956083803eb612df0565b6001600160a01b0382167380fb784b7ed66730e8b1dbd9820afd29931aab0314156136165750737d2d3688df45ce7c552e19c27e007673da9204b8612df0565b6001600160a01b03821673514910771af9ca656af840dff83e8264ecf986ca1415613656575073a64bd6c70cb9051f6a9ba1f163fdc07e0dfb5f84612df0565b6001600160a01b038216730f5d2fb29fb7d3cfee444a200298f468908cc94214156136965750736fce4a401b6b80ace52baaefe4421bd188e76f6f612df0565b6001600160a01b038216739f8f72aa9304c8b593d555f12ef6589cc3a579a214156136d65750737deb5e830be29f91e298ba5ff1356bb7f8146998612df0565b6001600160a01b038216731985365e9f78359a9b6ad760e32412f4a445e862141561371657507371010a9d003445ac60c4e6a7017c1e89a477b438612df0565b6001600160a01b03821673c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f1415613756575073328c4c80bc7aca0834db37e6600a6c49e12da4de612df0565b6001600160a01b038216732260fac5e5542a773aa44fbcfedf7c193bc2c5991415613796575073fc4b8ed459e00e5400be803a9bb3954234fd50e3612df0565b6001600160a01b03821673e41d2489571d322189246dafa5ebde1f4699f49814156133ab5750736fb0855c404e09c47c3fbca25f08d4e41f9f062f612df0565b60006137ea856001600160a01b0316612db9565b15613852576000805160206151df8339815191526001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561383857600080fd5b505af115801561384c573d6000803e3d6000fd5b50505050505b6000613866866001600160a01b0316612db9565b6138705785613880565b6000805160206151df8339815191525b90506000613896866001600160a01b0316612db9565b6138a057856138b0565b6000805160206151df8339815191525b6040805163e6a4390560e01b81526001600160a01b038581166004830152831660248201529051919250600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b15801561391857600080fd5b505afa15801561392c573d6000803e3d6000fd5b505050506040513d602081101561394257600080fd5b505190506139616001600160a01b03821684848963ffffffff614e8a16565b935061397d6001600160a01b038416828863ffffffff61304c16565b50816001600160a01b0316836001600160a01b03161015613a16576040805163022c0d9f60e01b815260006004820181905260248201879052306044830152608060648301526084820181905291516001600160a01b0384169263022c0d9f9260c4808201939182900301818387803b1580156139f957600080fd5b505af1158015613a0d573d6000803e3d6000fd5b50505050613a90565b6040805163022c0d9f60e01b815260048101869052600060248201819052306044830152608060648301526084820181905291516001600160a01b0384169263022c0d9f9260c4808201939182900301818387803b158015613a7757600080fd5b505af1158015613a8b573d6000803e3d6000fd5b505050505b613aa2876001600160a01b0316612db9565b15613b7d57604080516370a0823160e01b815230600482015290516000805160206151df83398151915291632e1a7d4d9183916370a08231916024808301926020929190829003018186803b158015613afa57600080fd5b505afa158015613b0e573d6000803e3d6000fd5b505050506040513d6020811015613b2457600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b158015613b6457600080fd5b505af1158015613b78573d6000803e3d6000fd5b505050505b505050949350505050565b610a878484613b99888887876137d6565b846137d6565b60607365e67cbc342712df67494acefc06fe951ee9398263bfdbfc43613bcd6001600160a01b038916612db9565b613bd75787613be7565b6000805160206151df8339815191525b613bf9886001600160a01b0316612db9565b613c035787613c13565b6000805160206151df8339815191525b856001016040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060006040518083038186803b158015613c7d57600080fd5b505afa158015613c91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cba57600080fd5b8101908080516040519392919084600160201b821115613cd957600080fd5b908301906020820185811115613cee57600080fd5b82518660208202830111600160201b82111715613d0a57600080fd5b82525081516020918201928201910280838360005b83811015613d37578181015183820152602001613d1f565b505050509050016040525050509050613d58866001600160a01b0316612db9565b15613dc0576000805160206151df8339815191526001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613da657600080fd5b505af1158015613dba573d6000803e3d6000fd5b50505050505b613e1a818381518110613dcf57fe5b602002602001015185613dea896001600160a01b0316612db9565b613df45788613e04565b6000805160206151df8339815191525b6001600160a01b0316919063ffffffff6130ca16565b808281518110613e2657fe5b60200260200101516001600160a01b0316638201aa3f613e4e886001600160a01b0316612db9565b613e585787613e68565b6000805160206151df8339815191525b86613e7b896001600160a01b0316612db9565b613e855788613e95565b6000805160206151df8339815191525b60006000196040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001846001600160a01b03166001600160a01b03168152602001838152602001828152602001955050505050506040805180830381600087803b158015613f0f57600080fd5b505af1158015613f23573d6000803e3d6000fd5b505050506040513d6040811015613f3957600080fd5b50613f4e90506001600160a01b038616612db9565b15610a8757604080516370a0823160e01b815230600482015290516000805160206151df83398151915291632e1a7d4d9183916370a08231916024808301926020929190829003018186803b158015613fa657600080fd5b505afa158015613fba573d6000803e3d6000fd5b505050506040513d6020811015613fd057600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b15801561126157600080fd5b82600061402784600160ff1b63ffffffff614f4116565b614032576000614035565b600a5b60408051600180825281830190925260ff9290921692506060919060208083019080388339019050509050838160008151811061406e57fe5b60200260200101818152505061408c886001600160a01b0316612db9565b61448657606073a1c0fa73c39cfbcc11ec9eb1afc665aba9996e2c6001600160a01b03166361e597f98a60018560006040519080825280602002602001820160405280156140e4578160200160208202803883390190505b506040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184600381111561411c57fe5b60ff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561416457818101518382015260200161414c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156141a357818101518382015260200161418b565b50505050905001965050505050505060006040518083038186803b1580156141ca57600080fd5b505afa1580156141de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561420757600080fd5b8101908080516040519392919084600160201b82111561422657600080fd5b90830190602082018581111561423b57600080fd5b8251600160201b81118282018810171561425457600080fd5b82525081516020918201929091019080838360005b83811015614281578181015183820152602001614269565b50505050905090810190601f1680156142ae5780820380516001836020036101000a031916815260200191505b50604052509192506142e79150506001600160a01b038a16739aab3f75489902f3a48495025729a0af77d4b11e8963ffffffff6130ca16565b739aab3f75489902f3a48495025729a0af77d4b11e6001600160a01b031663ae591d548a8673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee306000196000734d37f28d2db99e8d35a6c725a5f1749a085850a38b8a6040518a63ffffffff1660e01b8152600401808a6001600160a01b03166001600160a01b03168152602001898152602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001868152602001858152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156144025781810151838201526020016143ea565b50505050905090810190601f16801561442f5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050602060405180830381600087803b15801561445657600080fd5b505af115801561446a573d6000803e3d6000fd5b505050506040513d602081101561448057600080fd5b50519350505b614498876001600160a01b0316612db9565b610e1957606073a1c0fa73c39cfbcc11ec9eb1afc665aba9996e2c6001600160a01b03166381efcbdd8960018560006040519080825280602002602001820160405280156144f0578160200160208202803883390190505b506040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184600381111561452857fe5b60ff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015614570578181015183820152602001614558565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156145af578181015183820152602001614597565b50505050905001965050505050505060006040518083038186803b1580156145d657600080fd5b505afa1580156145ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561461357600080fd5b8101908080516040519392919084600160201b82111561463257600080fd5b90830190602082018581111561464757600080fd5b8251600160201b81118282018810171561466057600080fd5b82525081516020918201929091019080838360005b8381101561468d578181015183820152602001614675565b50505050905090810190601f1680156146ba5780820380516001836020036101000a031916815260200191505b506040525050509050739aab3f75489902f3a48495025729a0af77d4b11e6001600160a01b031663ae591d548573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee878c306000196000734d37f28d2db99e8d35a6c725a5f1749a085850a38c8b6040518b63ffffffff1660e01b8152600401808a6001600160a01b03166001600160a01b03168152602001898152602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001868152602001858152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156147df5781810151838201526020016147c7565b50505050905090810190601f16801561480c5780820380516001836020036101000a031916815260200191505b509a50505050505050505050506020604051808303818588803b15801561483257600080fd5b505af1158015614846573d6000803e3d6000fd5b50505050506040513d602081101561485d57600080fd5b5050505050505050505050565b600061487e836001600160a01b0316612db9565b15801561489a5750614898826001600160a01b0316612db9565b155b156148a757506000612db3565b6148af6151be565b506040805160c0810182527363825c174ab367968ec60f061753d3bbd36a0d8f8152737a3370075a54b187d7bd5dcebf0ff2b5552d4f7d6020820152734f32bbe8dfc9efd54345fc936f9fef1048746fcf91810191909152731e158c0e93c30d24e918ef83d1e0be23595c3c0f6060808301919091527331e085afd48a1d6e51cc193153d625e8f0514c7f60808301527310908c875d865c66f271f5d3949848971c9595c960a083015273c8fb12402cb16970f3c5f4b48ff68eb9d128930163d58915826149856001600160a01b038816612db9565b61498f5786614991565b855b604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152600060248301819052600a60448401529051606480840193829003018186803b1580156149e257600080fd5b505afa1580156149f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015614a1f57600080fd5b8101908080516040519392919084600160201b821115614a3e57600080fd5b908301906020820185811115614a5357600080fd5b82518660208202830111600160201b82111715614a6f57600080fd5b82525081516020918201928201910280838360005b83811015614a9c578181015183820152602001614a84565b50505050905001604052505050905060008090505b8151811015614bdb57600160005b6006811015614b1657848160068110614ad457fe5b60200201516001600160a01b0316848481518110614aee57fe5b60200260200101516001600160a01b03161415614b0e5760009150614b16565b600101614abf565b508015614bd25773c8fb12402cb16970f3c5f4b48ff68eb9d12893016001600160a01b031663106e9a4b848481518110614b4c57fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015614b9a57600080fd5b505afa158015614bae573d6000803e3d6000fd5b505050506040513d6020811015614bc457600080fd5b50519450612db39350505050565b50600101614ab1565b50600095945050505050565b6000612db083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614f47565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261127c908590614fa1565b60008183614d0f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cd4578181015183820152602001614cbc565b50505050905090810190601f168015614d015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d1b57fe5b0495945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526131be908490614fa1565b801580614dfd575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015614dcf57600080fd5b505afa158015614de3573d6000803e3d6000fd5b505050506040513d6020811015614df957600080fd5b5051155b614e385760405162461bcd60e51b81526004018080602001828103825260368152602001806152db6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526131be908490614fa1565b600080614ea66001600160a01b0386168763ffffffff612f0716565b90506000614ec36001600160a01b0386168863ffffffff612f0716565b90506000614ed9856103e563ffffffff612fb116565b90506000614eed828463ffffffff612fb116565b90506000614f1383614f07876103e863ffffffff612fb116565b9063ffffffff612d5616565b90508015614f3057614f2b828263ffffffff61300a16565b614f33565b60005b9a9950505050505050505050565b16151590565b60008184841115614f995760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614cd4578181015183820152602001614cbc565b505050900390565b614fb3826001600160a01b0316615159565b615004576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106150425780518252601f199092019160209182019101615023565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146150a4576040519150601f19603f3d011682016040523d82523d6000602084013e6150a9565b606091505b509150915081615100576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561127c5780806020019051602081101561511c57600080fd5b505161127c5760405162461bcd60e51b815260040180806020018281038252602a8152602001806152b1602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061518d57508115155b949350505050565b604051806103e00160405280601f905b6151dc8152602001906001900390816151a55790505090565b6040518060c001604052806006906020820280388339509192915050565bfefe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f57726f6e6720757365616765206f66204554482e756e6976657273616c5472616e7366657246726f6d2829536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb484f6e6553706c69743a2052657475726e20616d6f756e7420776173206e6f7420656e6f7567685361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e63654f6e6553706c69743a20446973747269627574696f6e2061727261792073686f756c64206e6f74206578636565642072657365727665732061727261792073697a65a265627a7a723158209a915f058efb80641652ffd8f05554ed2f2c8f42f470f528956456550937dc8464736f6c63430005110032 \ No newline at end of file +608060405234801561001057600080fd5b50604051620052c2380380620052c28339818101604052602081101561003557600080fd5b5051600080546001600160a01b039092166001600160a01b031990921691909117905561525a80620000686000396000f3fe60806040526004361061003f5760003560e01c8063085e2c5b1461004e5780638373f265146100f8578063e2a7515e146101af578063fbe4ed9514610289575b3332141561004c57600080fd5b005b34801561005a57600080fd5b5061009d600480360360a081101561007157600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608001356102ba565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156100e35781810151838201526020016100cb565b50505050905001935050505060405180910390f35b34801561010457600080fd5b5061014d600480360360c081101561011b57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a001356102dd565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610199578181015183820152602001610181565b5050505090500194505050505060405180910390f35b610277600480360360c08110156101c557600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561020457600080fd5b82018360208201111561021657600080fd5b803590602001918460208302840111600160201b8311171561023757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610434915050565b60408051918252519081900360200190f35b34801561029557600080fd5b5061029e6107f5565b604080516001600160a01b039092168252519081900360200190f35b600060606102cd878787878760006102dd565b9199919850909650505050505050565b6000805460408051638373f26560e01b81526001600160a01b038a81166004830152898116602483015260448201899052606482018890526084820187905260a48201869052915184936060931691638373f2659160c48083019287929190829003018186803b15801561035057600080fd5b505afa158015610364573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052606081101561038d57600080fd5b81516020830151604080850180519151939592948301929184600160201b8211156103b757600080fd5b9083019060208201858111156103cc57600080fd5b82518660208202830111600160201b821117156103e857600080fd5b82525081516020918201928201910280838360005b838110156104155781810151838201526020016103fd565b5050505090500160405250505092509250925096509650969350505050565b6000856001600160a01b0316876001600160a01b031614156104575750836107eb565b61045f615086565b604051806103e001604052806108048152602001610a908152602001610add8152602001610e2381526020016110ec8152602001611282815260200161145e815260200161168e81526020016118c88152602001611b028152602001611cad8152602001611ed581526020016121338152602001612288815260200161229481526020016122af81526020016122ca81526020016122e5815260200161251f81526020016126ac81526020016128a0815260200161294c8152602001612a238152602001612ac28152602001612cb68152602001612cc48152602001612cd28152602001612ce08152602001612cfd8152602001612d138152602001612d338152509050601f845111156105a45760405162461bcd60e51b81526004018080602001828103825260428152602001806151e46042913960600191505060405180910390fd5b600080805b86518110156106025760008782815181106105c057fe5b602002602001015111156105fa576105f48782815181106105dd57fe5b602002602001015184612d4990919063ffffffff16565b92508091505b6001016105a9565b50816106625761061a8a6001600160a01b0316612dac565b156106575760405133903480156108fc02916000818181858888f1935050505015801561064b573d6000803e3d6000fd5b503493505050506107eb565b8793505050506107eb565b61067d6001600160a01b038b1633308b63ffffffff612de816565b60006106986001600160a01b038c163063ffffffff612efa16565b905060005b875181101561073b578781815181106106b257fe5b6020026020010151600014156106c757610733565b60006106ff856106f38b85815181106106dc57fe5b60200260200101518e612fa490919063ffffffff16565b9063ffffffff612ffd16565b90508382141561070c5750815b80830392506107318d8d838b8a87601f811061072457fe5b602002015163ffffffff16565b505b60010161069d565b506107556001600160a01b038b163063ffffffff612efa16565b9450878510156107965760405162461bcd60e51b815260040180806020018281038252602681526020018061515e6026913960400191505060405180910390fd5b6107b06001600160a01b038b16338763ffffffff61303f16565b506107e5336107ce6001600160a01b038e163063ffffffff612efa16565b6001600160a01b038e16919063ffffffff61303f16565b50505050505b9695505050505050565b6000546001600160a01b031681565b816108176001600160a01b038616612dac565b61095757604080516303795fb160e11b81526001600160a01b0387166004820152905160009173c0a47dfe034b400b47bdad5fecda2621de6c4d95916306f2bf6291602480820192602092909190829003018186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d60208110156108a357600080fd5b505190506001600160a01b03811615610955576108d06001600160a01b038716828463ffffffff6130bd16565b604080516395e3c50b60e01b8152600481018490526001602482015242604482015290516001600160a01b038316916395e3c50b9160648083019260209291908290030181600087803b15801561092657600080fd5b505af115801561093a573d6000803e3d6000fd5b505050506040513d602081101561095057600080fd5b505191505b505b610969846001600160a01b0316612dac565b610a8957604080516303795fb160e11b81526001600160a01b0386166004820152905160009173c0a47dfe034b400b47bdad5fecda2621de6c4d95916306f2bf6291602480820192602092909190829003018186803b1580156109cb57600080fd5b505afa1580156109df573d6000803e3d6000fd5b505050506040513d60208110156109f557600080fd5b505190506001600160a01b03811615610a8757806001600160a01b031663f39b5b9b836001426040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b158015610a5757600080fd5b505af1158015610a6b573d6000803e3d6000fd5b50505050506040513d6020811015610a8257600080fd5b505191505b505b5050505050565b6040805162461bcd60e51b815260206004820152601a60248201527f5468697320736f75726365207761732064657072656361746564000000000000604482015290519081900360640190fd5b60007352ae12abe5d8bd778bd5397f99ca900624cfadd46001600160a01b031663bb34534c6040518163ffffffff1660e01b815260040180806c42616e636f724e6574776f726b60981b815250602001905060206040518083038186803b158015610b4757600080fd5b505afa158015610b5b573d6000803e3d6000fd5b505050506040513d6020811015610b7157600080fd5b505190506060736f0cd8c4f6f06eab664c7e3031909452b4b728616375e1cc82610ba36001600160a01b038916612dac565b610bad5787610bc3565b73c0829421c1d260bd3cb3e0f06cfe2d52db2ce3155b610bd5886001600160a01b0316612dac565b610bdf5787610bf5565b73c0829421c1d260bd3cb3e0f06cfe2d52db2ce3155b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060006040518083038186803b158015610c5457600080fd5b505afa158015610c68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610c9157600080fd5b8101908080516040519392919084600160201b821115610cb057600080fd5b908301906020820185811115610cc557600080fd5b82518660208202830111600160201b82111715610ce157600080fd5b82525081516020918201928201910280838360005b83811015610d0e578181015183820152602001610cf6565b505050509050016040525050509050610d3b8285886001600160a01b03166130bd9092919063ffffffff16565b816001600160a01b031663f3898a97610d5c886001600160a01b0316612dac565b610d67576000610d69565b855b838760016040518563ffffffff1660e01b81526004018080602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610dc8578181015183820152602001610db0565b505050509050019450505050506020604051808303818588803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b50505050506040513d6020811015610e1957600080fd5b5050505050505050565b610e35846001600160a01b0316612dac565b15610e9d576000805160206150b28339815191526001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b50505050505b6000610eb1856001600160a01b0316612dac565b610ebb5784610ecb565b6000805160206150b28339815191525b9050610efb6001600160a01b03821673794e6e91555438afc3ccf1c5076a74f42133d08d8563ffffffff6130bd16565b73794e6e91555438afc3ccf1c5076a74f42133d08d630621b4f6610f276001600160a01b038816612dac565b610f315786610f41565b6000805160206150b28339815191525b85610f54886001600160a01b0316612dac565b610f5e5787610f6e565b6000805160206150b28339815191525b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015260248101939093529216604482015260016064820152905160848083019260209291908290030181600087803b158015610fcc57600080fd5b505af1158015610fe0573d6000803e3d6000fd5b505050506040513d6020811015610ff657600080fd5b5061100b90506001600160a01b038516612dac565b15610a8957604080516370a0823160e01b815230600482015290516000805160206150b283398151915291632e1a7d4d9183916370a08231916024808301926020929190829003018186803b15801561106357600080fd5b505afa158015611077573d6000803e3d6000fd5b505050506040513d602081101561108d57600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b505050505050505050565b60006001600160a01b03851660008051602061513e83398151915214611113576000611116565b60025b6001600160a01b0386166000805160206150d28339815191521461113b57600061113e565b60015b0160ff169050600060008051602061513e8339815191526001600160a01b0386161461116b57600061116e565b60025b6001600160a01b0386166000805160206150d283398151915214611193576000611196565b60015b0160ff16905081600f0b600014806111b1575080600f0b6000145b156111bd57505061127c565b6111eb6001600160a01b03871673a2b47e3d5c44877cca798226b7b8118f9bfb7a568663ffffffff6130bd16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b602482015260448101869052600060648201819052915173a2b47e3d5c44877cca798226b7b8118f9bfb7a569263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b505af1158015611275573d6000803e3d6000fd5b5050505050505b50505050565b60006001600160a01b03851673dac17f958d2ee523a2206206994597c13d831ec7146112af5760006112b2565b60035b6001600160a01b03861660008051602061513e833981519152146112d75760006112da565b60025b6001600160a01b0387166000805160206150d2833981519152146112ff576000611302565b60015b010160ff169050600073dac17f958d2ee523a2206206994597c13d831ec76001600160a01b0316856001600160a01b03161461133f576000611342565b60035b6001600160a01b03861660008051602061513e8339815191521461136757600061136a565b60025b6001600160a01b0387166000805160206150d28339815191521461138f576000611392565b60015b010160ff16905081600f0b600014806113ae575080600f0b6000145b156113ba57505061127c565b6113e86001600160a01b0387167352ea46506b9cc5ef470c5bf89f17dc28bb35d85c8663ffffffff6130bd16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517352ea46506b9cc5ef470c5bf89f17dc28bb35d85c9263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b0385166e085d4780b73119b644ae5ecd22b37614611486576000611489565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146114b45760006114b7565b60035b6001600160a01b03871660008051602061513e833981519152146114dc5760006114df565b60025b6001600160a01b0388166000805160206150d283398151915214611504576000611507565b60015b01010160ff16905060006e085d4780b73119b644ae5ecd22b3766001600160a01b0316856001600160a01b031614611540576000611543565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec71461156e576000611571565b60035b6001600160a01b03871660008051602061513e83398151915214611596576000611599565b60025b6001600160a01b0388166000805160206150d2833981519152146115be5760006115c1565b60015b01010160ff16905081600f0b600014806115de575080600f0b6000145b156115ea57505061127c565b6116186001600160a01b0387167345f783cce6b7ff23b2ab2d70e416cdb7d6055f518663ffffffff6130bd16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517345f783cce6b7ff23b2ab2d70e416cdb7d6055f519263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b038516734fabb145d64652a948d72533023f6e7a623c7c53146116bb5760006116be565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146116e95760006116ec565b60035b6001600160a01b03871660008051602061513e83398151915214611711576000611714565b60025b6001600160a01b0388166000805160206150d28339815191521461173957600061173c565b60015b01010160ff1690506000734fabb145d64652a948d72533023f6e7a623c7c536001600160a01b0316856001600160a01b03161461177a57600061177d565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146117a85760006117ab565b60035b6001600160a01b03871660008051602061513e833981519152146117d05760006117d3565b60025b6001600160a01b0388166000805160206150d2833981519152146117f85760006117fb565b60015b01010160ff16905081600f0b60001480611818575080600f0b6000145b1561182457505061127c565b6118526001600160a01b0387167379a8c46dea5ada233abaffd40f3a0a2b1e5a4f278663ffffffff6130bd16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517379a8c46dea5ada233abaffd40f3a0a2b1e5a4f279263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b0385167357ab1ec28d129707052df4df418d58a2d46d5f51146118f55760006118f8565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec714611923576000611926565b60035b6001600160a01b03871660008051602061513e8339815191521461194b57600061194e565b60025b6001600160a01b0388166000805160206150d283398151915214611973576000611976565b60015b01010160ff16905060007357ab1ec28d129707052df4df418d58a2d46d5f516001600160a01b0316856001600160a01b0316146119b45760006119b7565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146119e25760006119e5565b60035b6001600160a01b03871660008051602061513e83398151915214611a0a576000611a0d565b60025b6001600160a01b0388166000805160206150d283398151915214611a32576000611a35565b60015b01010160ff16905081600f0b60001480611a52575080600f0b6000145b15611a5e57505061127c565b611a8c6001600160a01b03871673a5407eae9ba41422680e2e00537571bcc53efbfd8663ffffffff6130bd16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b602482015260448101869052600060648201819052915173a5407eae9ba41422680e2e00537571bcc53efbfd9263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b611b14846001600160a01b0316612dac565b611bdc576000611b23856131b6565b9050611b3f6001600160a01b038616828563ffffffff6130bd16565b806001600160a01b031663a0712d68846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611b8557600080fd5b505af1158015611b99573d6000803e3d6000fd5b505050506040513d6020811015611baf57600080fd5b50611bd690508185611bd06001600160a01b0383163063ffffffff612efa16565b85610804565b5061127c565b611bee836001600160a01b0316612dac565b61127c576000611bfd846131b6565b9050611c0b85828585610804565b6001600160a01b03811663db006a75611c2a823063ffffffff612efa16565b6040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b505050506040513d6020811015611c8a57600080fd5b50611ca690506001600160a01b0385163063ffffffff612efa16565b505061127c565b6001600160a01b0384166000805160206150d28339815191521415611da257611cfa6001600160a01b0385167306af07097c9eeb7fd685c692751d5c66db49c2158463ffffffff6130bd16565b60408051633b4da69f60e01b81523060048201526024810184905290517306af07097c9eeb7fd685c692751d5c66db49c21591633b4da69f91604480830192600092919082900301818387803b158015611d5357600080fd5b505af1158015611d67573d6000803e3d6000fd5b50611d9d92507306af07097c9eeb7fd685c692751d5c66db49c2159150859050611d97823063ffffffff612efa16565b84610804565b61127c565b6001600160a01b0383166000805160206150d2833981519152141561127c57611de1847306af07097c9eeb7fd685c692751d5c66db49c2158484610804565b604080516370a0823160e01b8152306004820181905291517306af07097c9eeb7fd685c692751d5c66db49c2159263ef693bed92909184916370a08231916024808301926020929190829003018186803b158015611e3e57600080fd5b505afa158015611e52573d6000803e3d6000fd5b505050506040513d6020811015611e6857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015611eb857600080fd5b505af1158015611ecc573d6000803e3d6000fd5b5050505061127c565b611ee7846001600160a01b0316612dac565b61202e576000611ef6856133a6565b9050611f8b73398ec7346dcd622edc5ae82352f02be94c62d1196001600160a01b031663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b50516001600160a01b038716908563ffffffff6130bd16565b60408051636968703360e11b81526001600160a01b03871660048201526024810185905261044d6044820152905173398ec7346dcd622edc5ae82352f02be94c62d1199163d2d0e06691606480830192600092919082900301818387803b158015611ff557600080fd5b505af1158015612009573d6000803e3d6000fd5b50505050611bd68185611bd030856001600160a01b0316612efa90919063ffffffff16565b612040836001600160a01b0316612dac565b61127c57600061204f846133a6565b905061205d85828585610804565b604080516370a0823160e01b815230600482015290516001600160a01b0383169163db006a759183916370a08231916024808301926020929190829003018186803b1580156120ab57600080fd5b505afa1580156120bf573d6000803e3d6000fd5b505050506040513d60208110156120d557600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050505061127c565b6000737079e8517594e5b21d2b9a0d17cb33f5fe2bca706001600160a01b031663d4b839926040518163ffffffff1660e01b815260040160206040518083038186803b15801561218257600080fd5b505afa158015612196573d6000803e3d6000fd5b505050506040513d60208110156121ac57600080fd5b505190506121ca6001600160a01b038616828563ffffffff6130bd16565b806001600160a01b031663fe0291566121eb876001600160a01b0316612dac565b6121f65760006121f8565b845b604080516001600160e01b031960e085901b1681526001600160a01b03808b1660048301528916602482015260448101889052600060648201529051608480830192602092919082900301818588803b15801561225457600080fd5b505af1158015612268573d6000803e3d6000fd5b50505050506040513d602081101561227f57600080fd5b50505050505050565b610a89848484846137c9565b61127c846000805160206150b2833981519152858585613b7b565b61127c846000805160206150d2833981519152858585613b7b565b61127c8460008051602061513e833981519152858585613b7b565b60006001600160a01b038516738e870d67f660d95d5be530380d0ec0bd388289e114612312576000612315565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec714612340576000612343565b60035b6001600160a01b03871660008051602061513e8339815191521461236857600061236b565b60025b6001600160a01b0388166000805160206150d283398151915214612390576000612393565b60015b01010160ff1690506000738e870d67f660d95d5be530380d0ec0bd388289e16001600160a01b0316856001600160a01b0316146123d15760006123d4565b60045b6001600160a01b03861673dac17f958d2ee523a2206206994597c13d831ec7146123ff576000612402565b60035b6001600160a01b03871660008051602061513e8339815191521461242757600061242a565b60025b6001600160a01b0388166000805160206150d28339815191521461244f576000612452565b60015b01010160ff16905081600f0b6000148061246f575080600f0b6000145b1561247b57505061127c565b6124a96001600160a01b0387167306364f10b501e868329afbc005b3492902d6c7638663ffffffff6130bd16565b60408051635320bf6b60e11b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517306364f10b501e868329afbc005b3492902d6c7639263a6417ed6926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b038516732260fac5e5542a773aa44fbcfedf7c193bc2c5991461254c57600061254f565b60025b6001600160a01b03861673eb4c2781e4eba804ce9a9803c67d0893436bb27d1461257a57600061257d565b60015b0160ff1690506000732260fac5e5542a773aa44fbcfedf7c193bc2c5996001600160a01b038616146125b05760006125b3565b60025b6001600160a01b03861673eb4c2781e4eba804ce9a9803c67d0893436bb27d146125de5760006125e1565b60015b0160ff16905081600f0b600014806125fc575080600f0b6000145b1561260857505061127c565b6126366001600160a01b0387167393054188d876f558f4a66b2ef1d97d16edf0895b8663ffffffff6130bd16565b60408051630f7c084960e21b8152600019808501600f90810b810b6004840152908401810b900b60248201526044810186905260006064820181905291517393054188d876f558f4a66b2ef1d97d16edf0895b92633df02124926084808201939182900301818387803b15801561126157600080fd5b60006001600160a01b038516730316eb71485b0ab14103307bf65a021042c6d380146126d95760006126dc565b60035b6001600160a01b038616732260fac5e5542a773aa44fbcfedf7c193bc2c5991461270757600061270a565b60025b6001600160a01b038716731bbe271d15bb64df0bc6cd28df9ff322f2ebd84714612735576000612738565b60015b010160ff1690506000730316eb71485b0ab14103307bf65a021042c6d3806001600160a01b0316856001600160a01b031614612775576000612778565b60035b6001600160a01b038616732260fac5e5542a773aa44fbcfedf7c193bc2c599146127a35760006127a6565b60025b6001600160a01b038716731bbe271d15bb64df0bc6cd28df9ff322f2ebd847146127d15760006127d4565b60015b010160ff16905081600f0b600014806127f0575080600f0b6000145b156127fc57505061127c565b61282a6001600160a01b038716739726e9314ef1b96e45f40056bed61a088897313e8663ffffffff6130bd16565b60408051630f7c084960e21b8152600019808501600f90810b810b6004840152908401810b900b6024820152604481018690526000606482018190529151739726e9314ef1b96e45f40056bed61a088897313e92633df02124926084808201939182900301818387803b15801561126157600080fd5b6128ce6001600160a01b0385167303ef3f37856bd08eb47e2de7abc4ddd2c19b60f28463ffffffff6130bd16565b60408051630df791e560e41b81526001600160a01b038681166004830152851660248201526044810184905290517303ef3f37856bd08eb47e2de7abc4ddd2c19b60f29163df791e5091606480830192600092919082900301818387803b15801561293857600080fd5b505af1158015610e19573d6000803e3d6000fd5b61297a6001600160a01b03851673a8253a440be331dc4a7395b73948cca6f19dc97d8463ffffffff6130bd16565b604080516303ff4c0160e31b81526001600160a01b0386811660048301528516602482015260448101849052600060648201819052603242016084830152915173a8253a440be331dc4a7395b73948cca6f19dc97d92631ffa60089260a480820193602093909283900390910190829087803b1580156129f957600080fd5b505af1158015612a0d573d6000803e3d6000fd5b505050506040513d6020811015610a8757600080fd5b612a516001600160a01b03851673e2f2a5c287993345a840db3b0845fbc70f5935a58463ffffffff6130bd16565b60408051631ba0488760e21b81526001600160a01b0386811660048301528516602482015260448101849052306064820152905173e2f2a5c287993345a840db3b0845fbc70f5935a591636e81221c9160848083019260209291908290030181600087803b1580156129f957600080fd5b60006001600160a01b03851673fe18be6b3bd88a2d2a7f928d00292e7a9963cfc614612aef576000612af2565b60035b6001600160a01b038616732260fac5e5542a773aa44fbcfedf7c193bc2c59914612b1d576000612b20565b60025b6001600160a01b03871673eb4c2781e4eba804ce9a9803c67d0893436bb27d14612b4b576000612b4e565b60015b010160ff169050600073fe18be6b3bd88a2d2a7f928d00292e7a9963cfc66001600160a01b0316856001600160a01b031614612b8b576000612b8e565b60035b6001600160a01b038616732260fac5e5542a773aa44fbcfedf7c193bc2c59914612bb9576000612bbc565b60025b6001600160a01b03871673eb4c2781e4eba804ce9a9803c67d0893436bb27d14612be7576000612bea565b60015b010160ff16905081600f0b60001480612c06575080600f0b6000145b15612c1257505061127c565b612c406001600160a01b038716737fc77b5c7614e1533320ea6ddc2eb61fa00a97148663ffffffff6130bd16565b60408051630f7c084960e21b8152600019808501600f90810b810b6004840152908401810b900b6024820152604481018690526000606482018190529151737fc77b5c7614e1533320ea6ddc2eb61fa00a971492633df02124926084808201939182900301818387803b15801561126157600080fd5b61127c848484846000613b92565b61127c848484846001613b92565b61127c848484846002613b92565b61127c848484846001685a434ecd46efdcc7c760b11b0319614003565b61127c84848484600161543360e81b0319614003565b61127c8484848460016b2c2466af65a2f7eba2a7a463609a1b0319614003565b61127c84848484612d44898961485d565b614003565b600082820183811015612da3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60006001600160a01b0382161580612de057506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b90505b919050565b80612df25761127c565b612dfb84612dac565b15612edf576001600160a01b03831633148015612e185750803410155b612e535760405162461bcd60e51b815260040180806020018281038252602b8152602001806150f2602b913960400191505060405180910390fd5b6001600160a01b0382163014612e9b576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612e99573d6000803e3d6000fd5b505b80341115611d9d57336108fc612eb7348463ffffffff614ad816565b6040518115909202916000818181858888f19350505050158015611bd6573d6000803e3d6000fd5b61127c6001600160a01b03851684848463ffffffff614b1a16565b6000612f0583612dac565b15612f1b57506001600160a01b03811631612da6565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612f7157600080fd5b505afa158015612f85573d6000803e3d6000fd5b505050506040513d6020811015612f9b57600080fd5b50519050612da6565b600082612fb357506000612da6565b82820282848281612fc057fe5b0414612da35760405162461bcd60e51b815260040180806020018281038252602181526020018061511d6021913960400191505060405180910390fd5b6000612da383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b74565b60008161304e575060016130b6565b61305784612dac565b15613098576040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015613092573d6000803e3d6000fd5b506130b6565b6130b26001600160a01b038516848463ffffffff614c1616565b5060015b9392505050565b6130c683612dac565b6131b157806130ef576130ea6001600160a01b03841683600063ffffffff614c6816565b6131b1565b60408051636eb1769f60e11b81523060048201526001600160a01b038481166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b15801561314057600080fd5b505afa158015613154573d6000803e3d6000fd5b505050506040513d602081101561316a57600080fd5b505190508181101561127c578015613197576131976001600160a01b03851684600063ffffffff614c6816565b61127c6001600160a01b038516848463ffffffff614c6816565b505050565b60006131ca826001600160a01b0316612dac565b156131ea5750734ddc2d193948926d02f9b1fe9e1daa0718270ed5612de3565b6001600160a01b0382166000805160206150d283398151915214156132245750735d3a536e4d6dbd6114cc1ead35777bab948e3643612de3565b6001600160a01b038216730d8775f648430679a709e98d2b0cb6250d2887ef14156132645750736c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e612de3565b6001600160a01b038216731985365e9f78359a9b6ad760e32412f4a445e86214156132a4575073158079ee67fce2f58472a96584a73c7ab9ac95c1612de3565b6001600160a01b03821660008051602061513e83398151915214156132de57507339aa39c021dfbae8fac545936693ac917d5e7563612de3565b6001600160a01b038216732260fac5e5542a773aa44fbcfedf7c193bc2c599141561331e575073c11b1268c1a384e55c48c2391d8d480264a3a7f4612de3565b6001600160a01b03821673e41d2489571d322189246dafa5ebde1f4699f498141561335e575073b3319f5d18bc0d84dd1b4825dcde5d5f7266d407612de3565b6001600160a01b03821673dac17f958d2ee523a2206206994597c13d831ec7141561339e575073f650c3d88d12db855b8bf7d11be6c55a4e07dcc9612de3565b506000919050565b60006133ba826001600160a01b0316612dac565b156133da5750733a3a65aab0dd2a17e3f1947ba16138cd37d08c04612de3565b6001600160a01b0382166000805160206150d28339815191521415613414575073fc1e690f61efd961294b3e1ce3313fbd8aa4f85d612de3565b6001600160a01b03821660008051602061513e833981519152141561344e5750739ba00d6856a4edf4665bca2c2309936572473b7e612de3565b6001600160a01b0382167357ab1ec28d129707052df4df418d58a2d46d5f51141561348e575073625ae63000f46200499120b906716420bd059240612de3565b6001600160a01b038216734fabb145d64652a948d72533023f6e7a623c7c5314156134ce5750736ee0f7bb50a54ab5253da0667b0dc2ee526c30a8612de3565b6001600160a01b0382166e085d4780b73119b644ae5ecd22b37614156135095750734da9b813057d04baef4e5800e36083717b4a0341612de3565b6001600160a01b03821673dac17f958d2ee523a2206206994597c13d831ec7141561354957507371fc860f7d3a592a4a98740e39db31d25db65ae8612de3565b6001600160a01b038216730d8775f648430679a709e98d2b0cb6250d2887ef1415613589575073e1ba0fb44ccb0d11b80f92f4f8ed94ca3ff51d00612de3565b6001600160a01b03821673dd974d5c2e2928dea5f71b9825b8b646686bd20014156135c95750739d91be44c06d373a8a226e1f3b146956083803eb612de3565b6001600160a01b0382167380fb784b7ed66730e8b1dbd9820afd29931aab0314156136095750737d2d3688df45ce7c552e19c27e007673da9204b8612de3565b6001600160a01b03821673514910771af9ca656af840dff83e8264ecf986ca1415613649575073a64bd6c70cb9051f6a9ba1f163fdc07e0dfb5f84612de3565b6001600160a01b038216730f5d2fb29fb7d3cfee444a200298f468908cc94214156136895750736fce4a401b6b80ace52baaefe4421bd188e76f6f612de3565b6001600160a01b038216739f8f72aa9304c8b593d555f12ef6589cc3a579a214156136c95750737deb5e830be29f91e298ba5ff1356bb7f8146998612de3565b6001600160a01b038216731985365e9f78359a9b6ad760e32412f4a445e862141561370957507371010a9d003445ac60c4e6a7017c1e89a477b438612de3565b6001600160a01b03821673c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f1415613749575073328c4c80bc7aca0834db37e6600a6c49e12da4de612de3565b6001600160a01b038216732260fac5e5542a773aa44fbcfedf7c193bc2c5991415613789575073fc4b8ed459e00e5400be803a9bb3954234fd50e3612de3565b6001600160a01b03821673e41d2489571d322189246dafa5ebde1f4699f498141561339e5750736fb0855c404e09c47c3fbca25f08d4e41f9f062f612de3565b60006137dd856001600160a01b0316612dac565b15613845576000805160206150b28339815191526001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561382b57600080fd5b505af115801561383f573d6000803e3d6000fd5b50505050505b6000613859866001600160a01b0316612dac565b6138635785613873565b6000805160206150b28339815191525b90506000613889866001600160a01b0316612dac565b61389357856138a3565b6000805160206150b28339815191525b6040805163e6a4390560e01b81526001600160a01b038581166004830152831660248201529051919250600091735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9163e6a43905916044808301926020929190829003018186803b15801561390b57600080fd5b505afa15801561391f573d6000803e3d6000fd5b505050506040513d602081101561393557600080fd5b505190506139546001600160a01b03821684848963ffffffff614d7b16565b93506139706001600160a01b038416828863ffffffff61303f16565b50816001600160a01b0316836001600160a01b03161015613a09576040805163022c0d9f60e01b815260006004820181905260248201879052306044830152608060648301526084820181905291516001600160a01b0384169263022c0d9f9260c4808201939182900301818387803b1580156139ec57600080fd5b505af1158015613a00573d6000803e3d6000fd5b50505050613a83565b6040805163022c0d9f60e01b815260048101869052600060248201819052306044830152608060648301526084820181905291516001600160a01b0384169263022c0d9f9260c4808201939182900301818387803b158015613a6a57600080fd5b505af1158015613a7e573d6000803e3d6000fd5b505050505b613a95876001600160a01b0316612dac565b15613b7057604080516370a0823160e01b815230600482015290516000805160206150b283398151915291632e1a7d4d9183916370a08231916024808301926020929190829003018186803b158015613aed57600080fd5b505afa158015613b01573d6000803e3d6000fd5b505050506040513d6020811015613b1757600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b158015613b5757600080fd5b505af1158015613b6b573d6000803e3d6000fd5b505050505b505050949350505050565b610a878484613b8c888887876137c9565b846137c9565b60607365e67cbc342712df67494acefc06fe951ee9398263bfdbfc43613bc06001600160a01b038916612dac565b613bca5787613bda565b6000805160206150b28339815191525b613bec886001600160a01b0316612dac565b613bf65787613c06565b6000805160206150b28339815191525b856001016040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001935050505060006040518083038186803b158015613c7057600080fd5b505afa158015613c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cad57600080fd5b8101908080516040519392919084600160201b821115613ccc57600080fd5b908301906020820185811115613ce157600080fd5b82518660208202830111600160201b82111715613cfd57600080fd5b82525081516020918201928201910280838360005b83811015613d2a578181015183820152602001613d12565b505050509050016040525050509050613d4b866001600160a01b0316612dac565b15613db3576000805160206150b28339815191526001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613d9957600080fd5b505af1158015613dad573d6000803e3d6000fd5b50505050505b613e0d818381518110613dc257fe5b602002602001015185613ddd896001600160a01b0316612dac565b613de75788613df7565b6000805160206150b28339815191525b6001600160a01b0316919063ffffffff6130bd16565b808281518110613e1957fe5b60200260200101516001600160a01b0316638201aa3f613e41886001600160a01b0316612dac565b613e4b5787613e5b565b6000805160206150b28339815191525b86613e6e896001600160a01b0316612dac565b613e785788613e88565b6000805160206150b28339815191525b60006000196040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001846001600160a01b03166001600160a01b03168152602001838152602001828152602001955050505050506040805180830381600087803b158015613f0257600080fd5b505af1158015613f16573d6000803e3d6000fd5b505050506040513d6040811015613f2c57600080fd5b50613f4190506001600160a01b038616612dac565b15610a8757604080516370a0823160e01b815230600482015290516000805160206150b283398151915291632e1a7d4d9183916370a08231916024808301926020929190829003018186803b158015613f9957600080fd5b505afa158015613fad573d6000803e3d6000fd5b505050506040513d6020811015613fc357600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b15801561126157600080fd5b82600061401a84600160ff1b63ffffffff614e3216565b614025576000614028565b600a5b60408051600180825281830190925260ff9290921692506060919060208083019080388339019050509050838160008151811061406157fe5b60200260200101818152505061407f886001600160a01b0316612dac565b61447957606073a1c0fa73c39cfbcc11ec9eb1afc665aba9996e2c6001600160a01b03166361e597f98a60018560006040519080825280602002602001820160405280156140d7578160200160208202803883390190505b506040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184600381111561410f57fe5b60ff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561415757818101518382015260200161413f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561419657818101518382015260200161417e565b50505050905001965050505050505060006040518083038186803b1580156141bd57600080fd5b505afa1580156141d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156141fa57600080fd5b8101908080516040519392919084600160201b82111561421957600080fd5b90830190602082018581111561422e57600080fd5b8251600160201b81118282018810171561424757600080fd5b82525081516020918201929091019080838360005b8381101561427457818101518382015260200161425c565b50505050905090810190601f1680156142a15780820380516001836020036101000a031916815260200191505b50604052509192506142da9150506001600160a01b038a16739aab3f75489902f3a48495025729a0af77d4b11e8963ffffffff6130bd16565b739aab3f75489902f3a48495025729a0af77d4b11e6001600160a01b031663ae591d548a8673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee306000196000734d37f28d2db99e8d35a6c725a5f1749a085850a38b8a6040518a63ffffffff1660e01b8152600401808a6001600160a01b03166001600160a01b03168152602001898152602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001868152602001858152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156143f55781810151838201526020016143dd565b50505050905090810190601f1680156144225780820380516001836020036101000a031916815260200191505b509a5050505050505050505050602060405180830381600087803b15801561444957600080fd5b505af115801561445d573d6000803e3d6000fd5b505050506040513d602081101561447357600080fd5b50519350505b61448b876001600160a01b0316612dac565b610e1957606073a1c0fa73c39cfbcc11ec9eb1afc665aba9996e2c6001600160a01b03166381efcbdd8960018560006040519080825280602002602001820160405280156144e3578160200160208202803883390190505b506040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184600381111561451b57fe5b60ff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561456357818101518382015260200161454b565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156145a257818101518382015260200161458a565b50505050905001965050505050505060006040518083038186803b1580156145c957600080fd5b505afa1580156145dd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561460657600080fd5b8101908080516040519392919084600160201b82111561462557600080fd5b90830190602082018581111561463a57600080fd5b8251600160201b81118282018810171561465357600080fd5b82525081516020918201929091019080838360005b83811015614680578181015183820152602001614668565b50505050905090810190601f1680156146ad5780820380516001836020036101000a031916815260200191505b506040525050509050739aab3f75489902f3a48495025729a0af77d4b11e6001600160a01b031663ae591d548573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee878c306000196000734d37f28d2db99e8d35a6c725a5f1749a085850a38c8b6040518b63ffffffff1660e01b8152600401808a6001600160a01b03166001600160a01b03168152602001898152602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001868152602001858152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156147d25781810151838201526020016147ba565b50505050905090810190601f1680156147ff5780820380516001836020036101000a031916815260200191505b509a50505050505050505050506020604051808303818588803b15801561482557600080fd5b505af1158015614839573d6000803e3d6000fd5b50505050506040513d602081101561485057600080fd5b5050505050505050505050565b6000614871836001600160a01b0316612dac565b15801561488d575061488b826001600160a01b0316612dac565b155b1561489a57506000612da6565b606073c8fb12402cb16970f3c5f4b48ff68eb9d1289301633d3dc52c6148c86001600160a01b038716612dac565b6148d257856148d4565b845b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060006040518083038186803b15801561491a57600080fd5b505afa15801561492e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561495757600080fd5b8101908080516040519392919084600160201b82111561497657600080fd5b90830190602082018581111561498b57600080fd5b82518660208202830111600160201b821117156149a757600080fd5b82525081516020918201928201910280838360005b838110156149d45781810151838201526020016149bc565b50505050905001604052505050905060008090505b8151811015614acd5760f8828281518110614a0057fe5b602002602001015160001c901c60bb14158015614a435750818181518110614a2457fe5b60200260200101516001685a434ecd46efdcc7c760b11b031960001b14155b8015614a6e5750818181518110614a5657fe5b6020026020010151600161543360e81b031960001b14155b8015614aa35750818181518110614a8157fe5b602002602001015160016b2c2466af65a2f7eba2a7a463609a1b031960001b14155b15614ac557818181518110614ab457fe5b602002602001015192505050612da6565b6001016149e9565b506000949350505050565b6000612da383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614e38565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261127c908590614e92565b60008183614c005760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bc5578181015183820152602001614bad565b50505050905090810190601f168015614bf25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614c0c57fe5b0495945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526131b1908490614e92565b801580614cee575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015614cc057600080fd5b505afa158015614cd4573d6000803e3d6000fd5b505050506040513d6020811015614cea57600080fd5b5051155b614d295760405162461bcd60e51b81526004018080602001828103825260368152602001806151ae6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526131b1908490614e92565b600080614d976001600160a01b0386168763ffffffff612efa16565b90506000614db46001600160a01b0386168863ffffffff612efa16565b90506000614dca856103e563ffffffff612fa416565b90506000614dde828463ffffffff612fa416565b90506000614e0483614df8876103e863ffffffff612fa416565b9063ffffffff612d4916565b90508015614e2157614e1c828263ffffffff612ffd16565b614e24565b60005b9a9950505050505050505050565b16151590565b60008184841115614e8a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614bc5578181015183820152602001614bad565b505050900390565b614ea4826001600160a01b031661504a565b614ef5576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310614f335780518252601f199092019160209182019101614f14565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614f95576040519150601f19603f3d011682016040523d82523d6000602084013e614f9a565b606091505b509150915081614ff1576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561127c5780806020019051602081101561500d57600080fd5b505161127c5760405162461bcd60e51b815260040180806020018281038252602a815260200180615184602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061507e57508115155b949350505050565b604051806103e00160405280601f905b6150af8152602001906001900390816150965790505090565bfefe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f57726f6e6720757365616765206f66204554482e756e6976657273616c5472616e7366657246726f6d2829536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb484f6e6553706c69743a2052657475726e20616d6f756e7420776173206e6f7420656e6f7567685361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e63654f6e6553706c69743a20446973747269627574696f6e2061727261792073686f756c64206e6f74206578636565642072657365727665732061727261792073697a65a265627a7a723158206aa8cdbcc9d18e674efb59d8f2569c5ed90d869f4f6e384c44ea1651e39e84b464736f6c63430005110032 \ No newline at end of file diff --git a/OneSplit.full.sol b/OneSplit.full.sol index f73b0b0..e4b801b 100644 --- a/OneSplit.full.sol +++ b/OneSplit.full.sol @@ -477,15 +477,9 @@ pragma solidity ^0.5.0; interface IKyberStorage { - function getReserveAddressesPerTokenSrc( - IERC20 token, - uint256 startIndex, - uint256 endToken - ) external view returns (address[] memory); - - function getReserveId( - address reserve - ) external view returns (bytes32); + function getReserveIdsPerTokenSrc( + IERC20 token + ) external view returns (bytes32[] memory); } // File: contracts/interface/IKyberHintHandler.sol @@ -1644,30 +1638,17 @@ contract OneSplitRoot is IOneSplitView { return 0; } - address payable[6] memory multiTokenReserves = [ - 0x63825c174ab367968EC60f061753D3bbD36A0D8F, // Reserve 1 - 0x7a3370075a54B187d7bD5DceBf0ff2B5552d4F7D, // Reserve 2 - 0x4f32BbE8dFc9efD54345Fc936f9fEF1048746fCF, // Reserve 3 - 0x1E158c0e93c30d24e918Ef83d1e0bE23595C3c0f, // Eth2Dai - 0x31E085Afd48a1d6e51Cc193153d625e8f0514C7F, // Uniswap - 0x10908C875D865C66f271F5d3949848971c9595C9 // Uniswap V2 - ]; - - address[] memory reserves = kyberStorage.getReserveAddressesPerTokenSrc( - fromToken.isETH() ? destToken : fromToken, 0, 10 + bytes32[] memory reserveIds = kyberStorage.getReserveIdsPerTokenSrc( + fromToken.isETH() ? destToken : fromToken ); - for (uint i = 0; i < reserves.length; i++) { - bool isSingleTokenKyberReserve = true; - for (uint j = 0; j < multiTokenReserves.length; j++) { - if (reserves[i] == multiTokenReserves[j]) { - isSingleTokenKyberReserve = false; - break; - } - } - - if (isSingleTokenKyberReserve) { - return kyberStorage.getReserveId(reserves[i]); + for (uint i = 0; i < reserveIds.length; i++) { + if ((uint256(reserveIds[i]) >> 248) != 0xBB && // Bridge + reserveIds[i] != 0xff4b796265722046707200000000000000000000000000000000000000000000 && // Reserve 1 + reserveIds[i] != 0xffabcd0000000000000000000000000000000000000000000000000000000000 && // Reserve 2 + reserveIds[i] != 0xff4f6e65426974205175616e7400000000000000000000000000000000000000) // Reserve 3 + { + return reserveIds[i]; } } diff --git a/contracts/OneSplitBase.sol b/contracts/OneSplitBase.sol index f24b7ac..e44bda0 100644 --- a/contracts/OneSplitBase.sol +++ b/contracts/OneSplitBase.sol @@ -278,30 +278,17 @@ contract OneSplitRoot is IOneSplitView { return 0; } - address payable[6] memory multiTokenReserves = [ - 0x63825c174ab367968EC60f061753D3bbD36A0D8F, // Reserve 1 - 0x7a3370075a54B187d7bD5DceBf0ff2B5552d4F7D, // Reserve 2 - 0x4f32BbE8dFc9efD54345Fc936f9fEF1048746fCF, // Reserve 3 - 0x1E158c0e93c30d24e918Ef83d1e0bE23595C3c0f, // Eth2Dai - 0x31E085Afd48a1d6e51Cc193153d625e8f0514C7F, // Uniswap - 0x10908C875D865C66f271F5d3949848971c9595C9 // Uniswap V2 - ]; - - address[] memory reserves = kyberStorage.getReserveAddressesPerTokenSrc( - fromToken.isETH() ? destToken : fromToken, 0, 10 + bytes32[] memory reserveIds = kyberStorage.getReserveIdsPerTokenSrc( + fromToken.isETH() ? destToken : fromToken ); - for (uint i = 0; i < reserves.length; i++) { - bool isSingleTokenKyberReserve = true; - for (uint j = 0; j < multiTokenReserves.length; j++) { - if (reserves[i] == multiTokenReserves[j]) { - isSingleTokenKyberReserve = false; - break; - } - } - - if (isSingleTokenKyberReserve) { - return kyberStorage.getReserveId(reserves[i]); + for (uint i = 0; i < reserveIds.length; i++) { + if ((uint256(reserveIds[i]) >> 248) != 0xBB && // Bridge + reserveIds[i] != 0xff4b796265722046707200000000000000000000000000000000000000000000 && // Reserve 1 + reserveIds[i] != 0xffabcd0000000000000000000000000000000000000000000000000000000000 && // Reserve 2 + reserveIds[i] != 0xff4f6e65426974205175616e7400000000000000000000000000000000000000) // Reserve 3 + { + return reserveIds[i]; } } diff --git a/contracts/interface/IKyberStorage.sol b/contracts/interface/IKyberStorage.sol index 6aef647..c563290 100644 --- a/contracts/interface/IKyberStorage.sol +++ b/contracts/interface/IKyberStorage.sol @@ -4,13 +4,7 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IKyberStorage { - function getReserveAddressesPerTokenSrc( - IERC20 token, - uint256 startIndex, - uint256 endToken - ) external view returns (address[] memory); - - function getReserveId( - address reserve - ) external view returns (bytes32); + function getReserveIdsPerTokenSrc( + IERC20 token + ) external view returns (bytes32[] memory); }