0x60a06040523060805234801561001457600080fd5b50608051611df961004c600039600081816105d90152818161062201528181610a2401528181610a640152610b0d0152611df96000f3fe60806040526004361061014b5760003560e01c8063715018a6116100b6578063c30a0f251161006f578063c30a0f25146103a0578063c514637a146103e0578063c744656514610400578063cc9ece0814610416578063f2fde38b1461042c578063fda237f81461044c57600080fd5b8063715018a6146102d557806383472fcf146102ea5780638ad433ac146103225780638da5cb5b1461034257806395805dad14610360578063a12747241461038057600080fd5b806342af83fb1161010857806342af83fb1461022c578063485cc9551461024c5780634f1ef2861461026c5780634f2112971461027f57806352d1902d1461029f5780636dccc8a6146102b457600080fd5b8063055ad42e14610150578063153de1431461017b5780632a81f8d61461019e5780632c5dcc77146101b45780633659cfe6146101d65780633b19e84a146101f6575b600080fd5b34801561015c57600080fd5b5061016561046c565b6040516101729190611801565b60405180910390f35b34801561018757600080fd5b5061019061053e565b604051908152602001610172565b3480156101aa57600080fd5b5061019060cb5481565b3480156101c057600080fd5b506101d46101cf366004611845565b6105b1565b005b3480156101e257600080fd5b506101d46101f136600461186f565b6105cf565b34801561020257600080fd5b5060d35460408051606083901c81526bffffffffffffffffffffffff909216602083015201610172565b34801561023857600080fd5b506101d461024736600461188a565b6106b7565b34801561025857600080fd5b506101d46102673660046118ac565b610793565b6101d461027a3660046118f5565b610a1a565b34801561028b57600080fd5b506101d461029a3660046119b7565b610aea565b3480156102ab57600080fd5b50610190610b00565b3480156102c057600080fd5b506101d46102cf3660046119e3565b50505050565b3480156102e157600080fd5b506101d4610bb3565b3480156102f657600080fd5b5060ca5461030a906001600160a01b031681565b6040516001600160a01b039091168152602001610172565b34801561032e57600080fd5b506101d461033d366004611a15565b610bc7565b34801561034e57600080fd5b506033546001600160a01b031661030a565b34801561036c57600080fd5b506101d461037b366004611a15565b610e37565b34801561038c57600080fd5b506101d461039b366004611a88565b610e96565b3480156103ac57600080fd5b506103d06103bb366004611a15565b60cd6020526000908152604090205460ff1681565b6040519015158152602001610172565b3480156103ec57600080fd5b506103d06103fb366004611ae7565b611091565b34801561040c57600080fd5b5061019060ce5481565b34801561042257600080fd5b5061019060cc5481565b34801561043857600080fd5b506101d461044736600461186f565b6110dd565b34801561045857600080fd5b5060c95461030a906001600160a01b031681565b60c9546040805163021313cf60e01b815290516000926001600160a01b03169163021313cf9160048083019260209291908290030181865afa1580156104b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104da9190611b44565b156104e55750600490565b60ce5415806104f5575060ce5442105b156105005750600090565b60ce5461050f90613840611b77565b42101561051c5750600190565b60ce5461052b90617080611b77565b4210156105385750600290565b50600390565b60c954604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611b8a565b905090565b6105b9611153565b60609190911b6001600160601b0319161760d355565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106205760405162461bcd60e51b815260040161061790611ba3565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610669600080516020611d7d833981519152546001600160a01b031690565b6001600160a01b03161461068f5760405162461bcd60e51b815260040161061790611bef565b610698816111ad565b604080516000808252602082019092526106b4918391906111b5565b50565b6106bf611153565b60c954604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015610709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d9190611b8a565b111561074c5760405163b466ddbf60e01b815260040160405180910390fd5b60cb82905560cc81905560408051838152602081018390527f901232fc92ac16700a7d4b60706cbd27dec177bc85c9c2dbd2e2871d63b22a23910160405180910390a15050565b600054610100900460ff16158080156107b35750600054600160ff909116105b806107cd5750303b1580156107cd575060005460ff166001145b6108305760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610617565b6000805460ff191660011790558015610853576000805461ff0019166101001790555b61085b611320565b61086361134f565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa1580156108ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d29190611b44565b6108fa576040516307bd4db960e41b81526001600160a01b0384166004820152602401610617565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b038316906301ffc9a790602401602060405180830381865afa158015610945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109699190611b44565b610991576040516307bd4db960e41b81526001600160a01b0383166004820152602401610617565b60c980546001600160a01b038086166001600160a01b03199283161790925560ca8054928516929091169190911790556109cf600d60116028610aea565b8015610a15576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610a625760405162461bcd60e51b815260040161061790611ba3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610aab600080516020611d7d833981519152546001600160a01b031690565b6001600160a01b031614610ad15760405162461bcd60e51b815260040161061790611bef565b610ada826111ad565b610ae6828260016111b5565b5050565b610af2611153565b60d09290925560d15560d255565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ba05760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610617565b50600080516020611d7d83398151915290565b610bbb611153565b610bc56000611376565b565b610bcf611153565b6000610bd961046c565b6004811115610bea57610bea6117eb565b14610c075760405162d0ba2160e41b815260040160405180910390fd5b60d35460c954604080516318160ddd60e01b81529051606084901c936bffffffffffffffffffffffff169283926001600160a01b03909116916318160ddd916004808201926020929091908290030181865afa158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f9190611b8a565b10610cad57604051630907cffb60e41b815260040160405180910390fd5b808360c960009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d269190611b8a565b610d309190611b77565b1115610dba5760c960009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dad9190611b8a565b610db79082611c3b565b92505b60005b838110156102cf5760c9546040516335313c2160e11b81526001600160a01b03858116600483015290911690636a62784290602401600060405180830381600087803b158015610e0c57600080fd5b505af1158015610e20573d6000803e3d6000fd5b505050508080610e2f90611c4e565b915050610dbd565b610e3f611153565b42811015610e6057604051630e0d5b9360e21b815260040160405180910390fd5b600060ce54118015610e73575060ce5442115b15610e915760405163a741a04560e01b815260040160405180910390fd5b60ce55565b60cb54600003610eb957604051631c8b625960e01b815260040160405180910390fd5b6000610ec361046c565b90506001816004811115610ed957610ed96117eb565b1080610ef657506003816004811115610ef457610ef46117eb565b115b15610f135760405162d0ba2160e41b815260040160405180910390fd5b6003816004811115610f2757610f276117eb565b1015610f9257610f39858585336113c8565b8115610f5257610f4d85858560cb54611449565b610f92565b6002816004811115610f6657610f666117eb565b1015610f845760405162d0ba2160e41b815260040160405180910390fd5b610f9285858560cc54611449565b60c954604080516318160ddd60e01b81529051610960926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110019190611b8a565b1061101f57604051633826ad7760e21b815260040160405180910390fd5b60c9546001600160a01b0316636a627842336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561107257600080fd5b505af1158015611086573d6000803e3d6000fd5b505050505050505050565b600080858585856040516020016110ab9493929190611c67565b60408051808303601f190181529181528151602092830120600090815260cd90925290205460ff169695505050505050565b6110e5611153565b6001600160a01b03811661114a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610617565b6106b481611376565b6033546001600160a01b03163314610bc55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610617565b6106b4611153565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156111e857610a15836114af565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611242575060408051601f3d908101601f1916820190925261123f91810190611b8a565b60015b6112a55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610617565b600080516020611d7d83398151915281146113145760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610617565b50610a1583838361154b565b600054610100900460ff166113475760405162461bcd60e51b815260040161061790611ca8565b610bc5611570565b600054610100900460ff16610bc55760405162461bcd60e51b815260040161061790611ca8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000848484846040516020016113e19493929190611c67565b60408051601f198184030181529181528151602092830120600081815260cd90935291205490915060ff161561142a5760405163c9838a6560e01b815260040160405180910390fd5b600090815260cd60205260409020805460ff1916600117905550505050565b61149284848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525085925061148d9150339050866115a0565b6115e3565b6102cf576040516309bde33960e01b815260040160405180910390fd5b6001600160a01b0381163b61151c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610617565b600080516020611d7d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611554836115fb565b6000825111806115615750805b15610a15576102cf838361163b565b600054610100900460ff166115975760405162461bcd60e51b815260040161061790611ca8565b610bc533611376565b6040516001600160601b0319606084901b166020820152603481018290526000906054016040516020818303038152906040528051906020012090505b92915050565b6000826115f0858461172f565b1490505b9392505050565b611604816114af565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6116a35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610617565b600080846001600160a01b0316846040516116be9190611d17565b600060405180830381855af49150503d80600081146116f9576040519150601f19603f3d011682016040523d82523d6000602084013e6116fe565b606091505b50915091506117268282604051806060016040528060278152602001611d9d6027913961177c565b95945050505050565b600081815b8451811015611774576117608286838151811061175357611753611d33565b6020026020010151611795565b91508061176c81611c4e565b915050611734565b509392505050565b6060831561178b5750816115f4565b6115f483836117c1565b60008183106117b15760008281526020849052604090206115f4565b5060009182526020526040902090565b8151156117d15781518083602001fd5b8060405162461bcd60e51b81526004016106179190611d49565b634e487b7160e01b600052602160045260246000fd5b602081016005831061182357634e487b7160e01b600052602160045260246000fd5b91905290565b80356001600160a01b038116811461184057600080fd5b919050565b6000806040838503121561185857600080fd5b61186183611829565b946020939093013593505050565b60006020828403121561188157600080fd5b6115f482611829565b6000806040838503121561189d57600080fd5b50508035926020909101359150565b600080604083850312156118bf57600080fd5b6118c883611829565b91506118d660208401611829565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561190857600080fd5b61191183611829565b9150602083013567ffffffffffffffff8082111561192e57600080fd5b818501915085601f83011261194257600080fd5b813581811115611954576119546118df565b604051601f8201601f19908116603f0116810190838211818310171561197c5761197c6118df565b8160405282815288602084870101111561199557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000606084860312156119cc57600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156119f957600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611a2757600080fd5b5035919050565b60008083601f840112611a4057600080fd5b50813567ffffffffffffffff811115611a5857600080fd5b6020830191508360208260051b8501011115611a7357600080fd5b9250929050565b80151581146106b457600080fd5b60008060008060608587031215611a9e57600080fd5b843567ffffffffffffffff811115611ab557600080fd5b611ac187828801611a2e565b909550935050602085013591506040850135611adc81611a7a565b939692955090935050565b60008060008060608587031215611afd57600080fd5b843567ffffffffffffffff811115611b1457600080fd5b611b2087828801611a2e565b90955093505060208501359150611b3960408601611829565b905092959194509250565b600060208284031215611b5657600080fd5b81516115f481611a7a565b634e487b7160e01b600052601160045260246000fd5b808201808211156115dd576115dd611b61565b600060208284031215611b9c57600080fd5b5051919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b818103818111156115dd576115dd611b61565b600060018201611c6057611c60611b61565b5060010190565b60006001600160fb1b03851115611c7d57600080fd5b8460051b80878437919091019283525060601b6001600160601b031916602082015260340192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611d0e578181015183820152602001611cf6565b50506000910152565b60008251611d29818460208701611cf3565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b6020815260008251806020840152611d68816040850160208701611cf3565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203540435af7c0af8218b7c5b376cdff70448f7de4a79a048e9f57cb4407002a9e64736f6c63430008110033