608060405269d3c21bcecceda10000006000553480156200001f57600080fd5b50604051620020bd380380620020bd833981016040819052620000429162000130565b600080546001600160a01b03841680835260036020908152604080852080546001600160601b0319166001600160601b0390951694909417909355835492519283529092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600180546001600160a01b0319166001600160a01b038316908117909155604080516000815260208101929092527f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6910160405180910390a1505062000168565b80516001600160a01b03811681146200012b57600080fd5b919050565b600080604083850312156200014457600080fd5b6200014f8362000113565b91506200015f6020840162000113565b90509250929050565b611f4580620001786000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063c3cda5201161007c578063c3cda520146103ce578063d505accf146103e1578063dd62ed3e146103f4578063e7a324dc14610436578063f1127ed81461045d578063fca3b5aa146104c457600080fd5b806370a0823114610308578063782d6fe11461033a5780637ecebe001461036557806395d89b4114610385578063a9059cbb146103a8578063b4b5ea57146103bb57600080fd5b806330adf81f1161011557806330adf81f1461023b578063313ce5671461026257806340c10f191461027c578063587cde1e146102915780635c19a95c146102ba5780636fcfff45146102cd57600080fd5b806306fdde031461015d578063075461721461019c578063095ea7b3146101c757806318160ddd146101ea57806320606b701461020157806323b872dd14610228575b600080fd5b6101866040518060400160405280600a8152602001692637b733902a37b5b2b760b11b81525081565b6040516101939190611afc565b60405180910390f35b6001546101af906001600160a01b031681565b6040516001600160a01b039091168152602001610193565b6101da6101d5366004611b67565b6104d7565b6040519015158152602001610193565b6101f360005481565b604051908152602001610193565b6101f37f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6101da610236366004611b91565b6105a2565b6101f37f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61026a601281565b60405160ff9091168152602001610193565b61028f61028a366004611b67565b6106ef565b005b6101af61029f366004611bcd565b6004602052600090815260409020546001600160a01b031681565b61028f6102c8366004611bcd565b6108f0565b6102f36102db366004611bcd565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610193565b6101f3610316366004611bcd565b6001600160a01b03166000908152600360205260409020546001600160601b031690565b61034d610348366004611b67565b6108fd565b6040516001600160601b039091168152602001610193565b6101f3610373366004611bcd565b60076020526000908152604090205481565b610186604051806040016040528060048152602001634c4f4e4760e01b81525081565b6101da6103b6366004611b67565b610b77565b61034d6103c9366004611bcd565b610bbe565b61028f6103dc366004611bf9565b610c3c565b61028f6103ef366004611c51565b610eeb565b6101f3610402366004611cbb565b6001600160a01b0391821660009081526002602090815260408083209390941682529190915220546001600160601b031690565b6101f37fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6104a061046b366004611cee565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6040805163ffffffff90931683526001600160601b03909116602083015201610193565b61028f6104d2366004611bcd565b6112d0565b60008060001983036104f157506001600160601b03610521565b61051e836040518060400160405280601c8152602001600080516020611e598339815191528152506113af565b90505b3360008181526002602090815260408083206001600160a01b0389168085529083529281902080546001600160601b0319166001600160601b03871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b6001600160a01b038316600090815260026020908152604080832033808552908352818420548251808401909352601c8352600080516020611e5983398151915293830193909352916001600160601b03169083906106029086906113af565b9050866001600160a01b0316836001600160a01b03161415801561062f57506001600160601b0382811614155b156106d757600061065983836040518060600160405280602f8152602001611ebf602f91396113de565b6001600160a01b038981166000818152600260209081526040808320948a168084529482529182902080546001600160601b0319166001600160601b0387169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6106e2878783611428565b5060019695505050505050565b6001546001600160a01b0316331461074e5760405162461bcd60e51b815260206004820152601e60248201527f4c6f6e673a206f6e6c7920746865206d696e7465722063616e206d696e74000060448201526064015b60405180910390fd5b6001600160a01b0382166107745760405162461bcd60e51b815260040161074590611d2e565b60006107a3826040518060400160405280601c8152602001600080516020611e598339815191528152506113af565b905060006107cb600054604051806060016040528060218152602001611e79602191396113af565b90506107f08183604051806060016040528060218152602001611e796021913961162a565b6001600160601b0390811660009081556001600160a01b038616815260036020908152604091829020548251808401909352601f83527f4c6f6e673a207472616e7366657220616d6f756e74206f766572666c6f7773009183019190915261085b921690849061162a565b6001600160a01b038516600081815260036020908152604080832080546001600160601b0319166001600160601b03968716179055519386168452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b038085166000908152600460205260408120546108ea921684611677565b50505050565b6108fa338261185d565b50565b600043821061094e5760405162461bcd60e51b815260206004820152601860248201527f4c6f6e673a206e6f74207965742064657465726d696e656400000000000000006044820152606401610745565b6001600160a01b03831660009081526006602052604081205463ffffffff169081900361097f57600091505061059c565b6001600160a01b038416600090815260056020526040812084916109a4600185611d8d565b63ffffffff90811682526020820192909252604001600020541611610a17576001600160a01b0384166000908152600560205260408120906109e7600184611d8d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b0316915061059c9050565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff16831015610a5257600091505061059c565b600080610a60600184611d8d565b90505b8163ffffffff168163ffffffff161115610b325760006002610a858484611d8d565b610a8f9190611db1565b610a999083611d8d565b6001600160a01b038816600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b031691810191909152919250879003610b065760200151945061059c9350505050565b805163ffffffff16871115610b1d57819350610b2b565b610b28600183611d8d565b92505b5050610a63565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b600080610ba7836040518060400160405280601c8152602001600080516020611e598339815191528152506113af565b9050610bb4338583611428565b5060019392505050565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610be9576000610c35565b6001600160a01b038316600090815260056020526040812090610c0d600184611d8d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9392505050565b604080518082018252600a8152692637b733902a37b5b2b760b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fe25e1d5574262599fbde29918a869a3c478eaf57cea6d53d5907c534ffdbd12181840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610dc1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e1e5760405162461bcd60e51b81526020600482015260176024820152764c6f6e673a20696e76616c6964207369676e617475726560481b6044820152606401610745565b6001600160a01b0381166000908152600760205260408120805491610e4283611de2565b919050558914610e8a5760405162461bcd60e51b81526020600482015260136024820152724c6f6e673a20696e76616c6964206e6f6e636560681b6044820152606401610745565b87421115610ed45760405162461bcd60e51b8152602060048201526017602482015276131bdb99ce881cda59db985d1d5c9948195e1c1a5c9959604a1b6044820152606401610745565b610ede818b61185d565b505050505b505050505050565b60006000198603610f0457506001600160601b03610f34565b610f31866040518060400160405280601c8152602001600080516020611e598339815191528152506113af565b90505b604080518082018252600a8152692637b733902a37b5b2b760b11b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fe25e1d5574262599fbde29918a869a3c478eaf57cea6d53d5907c534ffdbd12181840152466060820152306080808301919091528351808303909101815260a090910183528051908201206001600160a01b038b166000908152600790925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c91908661101483611de2565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012090506000828260405160200161109392919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156110fe573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661115b5760405162461bcd60e51b81526020600482015260176024820152764c6f6e673a20696e76616c6964207369676e617475726560481b6044820152606401610745565b8b6001600160a01b0316816001600160a01b0316146111b15760405162461bcd60e51b8152602060048201526012602482015271131bdb99ce881d5b985d5d1a1bdc9a5e995960721b6044820152606401610745565b884211156111fb5760405162461bcd60e51b8152602060048201526017602482015276131bdb99ce881cda59db985d1d5c9948195e1c1a5c9959604a1b6044820152606401610745565b84600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516112ba91906001600160601b0391909116815260200190565b60405180910390a3505050505050505050505050565b6001546001600160a01b031633146113465760405162461bcd60e51b815260206004820152603360248201527f4c6f6e673a206f6e6c7920746865206d696e7465722063616e206368616e676560448201527220746865206d696e746572206164647265737360681b6064820152608401610745565b600154604080516001600160a01b03928316815291831660208301527f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600081600160601b84106113d65760405162461bcd60e51b81526004016107459190611afc565b509192915050565b6000836001600160601b0316836001600160601b0316111582906114155760405162461bcd60e51b81526004016107459190611afc565b506114208385611dfb565b949350505050565b6001600160a01b0383166114925760405162461bcd60e51b815260206004820152602b60248201527f4c6f6e673a2063616e6e6f74207472616e736665722066726f6d20746865207a60448201526a65726f206164647265737360a81b6064820152608401610745565b6001600160a01b0382166114b85760405162461bcd60e51b815260040161074590611d2e565b6001600160a01b038316600090815260036020908152604091829020548251606081019093526025808452611503936001600160601b039092169285929190611e9a908301396113de565b6001600160a01b03848116600090815260036020908152604080832080546001600160601b0319166001600160601b03968716179055928616825290829020548251808401909352601f83527f4c6f6e673a207472616e7366657220616d6f756e74206f766572666c6f77730091830191909152611584921690839061162a565b6001600160a01b0383811660008181526003602090815260409182902080546001600160601b0319166001600160601b03968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b0380841660009081526004602052604080822054858416835291205461162592918216911683611677565b505050565b6000806116378486611e1b565b9050846001600160601b0316816001600160601b03161015839061166e5760405162461bcd60e51b81526004016107459190611afc565b50949350505050565b816001600160a01b0316836001600160a01b0316141580156116a257506000816001600160601b0316115b15611625576001600160a01b03831615611784576001600160a01b03831660009081526006602052604081205463ffffffff1690816116e257600061172e565b6001600160a01b038516600090815260056020526040812090611706600185611d8d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9050600061177282856040518060400160405280601c81526020017f4c6f6e673a20766f746520616d6f756e7420756e646572666c6f7773000000008152506113de565b9050611780868484846118e1565b5050505b6001600160a01b03821615611625576001600160a01b03821660009081526006602052604081205463ffffffff1690816117bf57600061180b565b6001600160a01b0384166000908152600560205260408120906117e3600185611d8d565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9050600061184f82856040518060400160405280601b81526020017f4c6f6e673a20766f746520616d6f756e74206f766572666c6f7773000000000081525061162a565b9050610ee3858484846118e1565b6001600160a01b03808316600081815260046020818152604080842080546003845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46108ea828483611677565b600061190543604051806060016040528060228152602001611eee60229139611ad9565b905060008463ffffffff1611801561195f57506001600160a01b038516600090815260056020526040812063ffffffff831691611943600188611d8d565b63ffffffff908116825260208201929092526040016000205416145b156119d3576001600160a01b03851660009081526005602052604081208391611989600188611d8d565b63ffffffff168152602081019190915260400160002080546001600160601b0392909216600160201b026fffffffffffffffffffffffff0000000019909216919091179055611a84565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000908152600582528681208b8616825290915294909420925183549451909116600160201b026fffffffffffffffffffffffffffffffff19909416911617919091179055611a53846001611e3b565b6001600160a01b0386166000908152600660205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b600081600160201b84106113d65760405162461bcd60e51b815260040161074591905b60006020808352835180602085015260005b81811015611b2a57858101830151858201604001528201611b0e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611b6257600080fd5b919050565b60008060408385031215611b7a57600080fd5b611b8383611b4b565b946020939093013593505050565b600080600060608486031215611ba657600080fd5b611baf84611b4b565b9250611bbd60208501611b4b565b9150604084013590509250925092565b600060208284031215611bdf57600080fd5b610c3582611b4b565b803560ff81168114611b6257600080fd5b60008060008060008060c08789031215611c1257600080fd5b611c1b87611b4b565b95506020870135945060408701359350611c3760608801611be8565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611c6c57600080fd5b611c7588611b4b565b9650611c8360208901611b4b565b95506040880135945060608801359350611c9f60808901611be8565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611cce57600080fd5b611cd783611b4b565b9150611ce560208401611b4b565b90509250929050565b60008060408385031215611d0157600080fd5b611d0a83611b4b565b9150602083013563ffffffff81168114611d2357600080fd5b809150509250929050565b60208082526029908201527f4c6f6e673a2063616e6e6f74207472616e7366657220746f20746865207a65726040820152686f206164647265737360b81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b63ffffffff828116828216039080821115611daa57611daa611d77565b5092915050565b600063ffffffff80841680611dd657634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600060018201611df457611df4611d77565b5060010190565b6001600160601b03828116828216039080821115611daa57611daa611d77565b6001600160601b03818116838216019080821115611daa57611daa611d77565b63ffffffff818116838216019080821115611daa57611daa611d7756fe4c6f6e673a20616d6f756e7420657863656564732039362062697473000000004c6f6e673a20746f74616c537570706c79206578636565647320393620626974734c6f6e673a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c6f6e673a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654c6f6e673a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220d849a751477316f622791ac691075ff818c259d2d182af08878d7cc1ca87e4de64736f6c63430008170033000000000000000000000000cfc46c05deccc4518d853effaa1b994bddc0cf0200000000000000000000000049a808621d0873e3f20a6b66c7239b2cd0cbb11e