0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de5780639ab24eb011610097578063c3cda52011610071578063c3cda52014610394578063d505accf146103a7578063dd62ed3e146103ba578063f1127ed8146103cd57600080fd5b80639ab24eb01461035b578063a457c2d71461036e578063a9059cbb1461038157600080fd5b806370a08231146102ca5780637ecebe00146102f357806384b0196e146103065780638e539e8c1461032157806391ddadf41461033457806395d89b411461035357600080fd5b8063395093511161014b578063587cde1e11610125578063587cde1e1461023e5780635c19a95c146102825780635d12fc0c146102975780636fcfff45146102a257600080fd5b806339509351146102105780633a46b1a8146102235780634bf5d7e91461023657600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806323b872dd146101e6578063313ce567146101f95780633644e51514610208575b600080fd5b61019b61040a565b6040516101a89190611de0565b60405180910390f35b6101c46101bf366004611e0f565b61049c565b60405190151581526020016101a8565b6002545b6040519081526020016101a8565b6101c46101f4366004611e39565b6104b6565b604051601281526020016101a8565b6101d86104da565b6101c461021e366004611e0f565b6104e9565b6101d8610231366004611e0f565b61050b565b61019b610595565b61026a61024c366004611e75565b6001600160a01b039081166000908152600960205260409020541690565b6040516001600160a01b0390911681526020016101a8565b610295610290366004611e75565b61062d565b005b6101d8633b9aca0081565b6102b56102b0366004611e75565b61063a565b60405163ffffffff90911681526020016101a8565b6101d86102d8366004611e75565b6001600160a01b031660009081526020819052604090205490565b6101d8610301366004611e75565b61065c565b61030e61067a565b6040516101a89796959493929190611e90565b6101d861032f366004611f26565b610703565b61033c61076a565b60405165ffffffffffff90911681526020016101a8565b61019b610775565b6101d8610369366004611e75565b610784565b6101c461037c366004611e0f565b610806565b6101c461038f366004611e0f565b610881565b6102956103a2366004611f50565b61088f565b6102956103b5366004611fa8565b6109c5565b6101d86103c8366004612012565b610b29565b6103e06103db366004612045565b610b54565b60408051825163ffffffff1681526020928301516001600160e01b031692810192909252016101a8565b60606003805461041990612085565b80601f016020809104026020016040519081016040528092919081815260200182805461044590612085565b80156104925780601f1061046757610100808354040283529160200191610492565b820191906000526020600020905b81548152906001019060200180831161047557829003601f168201915b5050505050905090565b6000336104aa818585610ef5565b60019150505b92915050565b6000336104c4858285611019565b6104cf85858561108d565b506001949350505050565b60006104e4611237565b905090565b6000336104aa8185856104fc8383610b29565b61050691906120d0565b610ef5565b600061051561076a565b65ffffffffffff16821061056c5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b0383166000908152600a6020526040902061058e9083611362565b9392505050565b6060436105a061076a565b65ffffffffffff16146105f55760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000006044820152606401610563565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b610637338261144b565b50565b6001600160a01b0381166000908152600a60205260408120546104b090610de6565b6001600160a01b0381166000908152600760205260408120546104b0565b6000606080828080836106ae7f506f6c656d6f730000000000000000000000000000000000000000000000000760056114c4565b6106d97f310000000000000000000000000000000000000000000000000000000000000160066114c4565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061070d61076a565b65ffffffffffff16821061075f5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610563565b6104b0600b83611362565b60006104e443610e82565b60606004805461041990612085565b6001600160a01b0381166000908152600a602052604081205480156107f3576001600160a01b0383166000908152600a60205260409020805460001983019081106107d1576107d16120e8565b60009182526020909120015464010000000090046001600160e01b03166107f6565b60005b6001600160e01b03169392505050565b600033816108148286610b29565b9050838110156108745760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610563565b6104cf8286868403610ef5565b6000336104aa81858561108d565b834211156108df5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610563565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610959906109519060a00160405160208183030381529060405280519060200120611568565b858585611595565b9050610964816115bd565b86146109b25760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610563565b6109bc818861144b565b50505050505050565b83421115610a155760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610563565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610a448c6115bd565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610a9f82611568565b90506000610aaf82878787611595565b9050896001600160a01b0316816001600160a01b031614610b125760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610563565b610b1d8a8a8a610ef5565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600a60205260409020805463ffffffff8416908110610b9857610b986120e8565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6000602083511015610bf457610bed836115e5565b90506104b0565b82828151610c059260200190611d03565b5060ff90506104b0565b90565b610c1c8282610ca2565b6002546001600160e01b031015610c8e5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610563565b610c9c600b610d6d83611623565b50505050565b6001600160a01b038216610cf85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610563565b8060026000828254610d0a91906120d0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610d6960008383611798565b5050565b600061058e82846120d0565b60006001600160e01b03821115610de25760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610563565b5090565b600063ffffffff821115610de25760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610563565b505050565b6001600160a01b03838116600090815260096020526040808220548584168352912054610e4b929182169116836117a3565b600065ffffffffffff821115610de25760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610563565b600061058e82846120fe565b6001600160a01b038316610f575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610563565b6001600160a01b038216610fb85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610563565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110258484610b29565b90506000198114610c9c57818110156110805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610563565b610c9c8484848403610ef5565b6001600160a01b0383166110f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610563565b6001600160a01b0382166111535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610563565b6001600160a01b038316600090815260208190526040902054818110156111cb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610563565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610c9c848484611798565b6000306001600160a01b037f00000000000000000000000068614481aef06e53d23bbe0772343fb555ac40c81614801561129057507f000000000000000000000000000000000000000000000000000000000000000146145b156112ba57507f54d164d29aece3218533c4e0a1125ebe605eac5febb70e3c9ba95f3af4bc06ba90565b6104e4604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527ffb9830ff5a2d84ec9abd51735aaf9a231e450cb9db5747f40c34af4e799b1ac3918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8154600090818160058111156113bc57600061137d846118e0565b61138790856120fe565b600088815260209020909150869082015463ffffffff1611156113ac578091506113ba565b6113b78160016120d0565b92505b505b808210156114095760006113d083836119c5565b600088815260209020909150869082015463ffffffff1611156113f557809150611403565b6114008160016120d0565b92505b506113bc565b8015611435576000868152602090208101600019015464010000000090046001600160e01b0316611438565b60005b6001600160e01b03169695505050505050565b6001600160a01b038281166000818152600960208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610c9c8284836117a3565b606060ff83146114d757610bed836119e0565b8180546114e390612085565b80601f016020809104026020016040519081016040528092919081815260200182805461150f90612085565b801561155c5780601f106115315761010080835404028352916020019161155c565b820191906000526020600020905b81548152906001019060200180831161153f57829003601f168201915b505050505090506104b0565b60006104b0611575611237565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006115a687878787611a1f565b915091506115b381611ae3565b5095945050505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600080829050601f81511115611610578260405163305a27a960e01b81526004016105639190611de0565b805161161b82612115565b179392505050565b825460009081908181156116705760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152611685565b60408051808201909152600080825260208201525b905080602001516001600160e01b031693506116a584868863ffffffff16565b92506000821180156116cf57506116ba61076a565b65ffffffffffff16816000015163ffffffff16145b15611714576116dd83610d79565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff90921691909117905561178e565b86604051806040016040528061173861172b61076a565b65ffffffffffff16610de6565b63ffffffff16815260200161174c86610d79565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b610e4b838383610e50565b816001600160a01b0316836001600160a01b0316141580156117c55750600081115b15610e4b576001600160a01b03831615611853576001600160a01b0383166000908152600a60205260408120819061180090610ee985611623565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611848929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610e4b576001600160a01b0382166000908152600a60205260408120819061188990610d6d85611623565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516118d1929190918252602082015260400190565b60405180910390a25050505050565b6000816118ef57506000919050565b600060016118fc84611c31565b901c6001901b9050600181848161191557611915612139565b048201901c9050600181848161192d5761192d612139565b048201901c9050600181848161194557611945612139565b048201901c9050600181848161195d5761195d612139565b048201901c9050600181848161197557611975612139565b048201901c9050600181848161198d5761198d612139565b048201901c905060018184816119a5576119a5612139565b048201901c905061058e818285816119bf576119bf612139565b04611cc5565b60006119d4600284841861214f565b61058e908484166120d0565b606060006119ed83611cdb565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611a565750600090506003611ada565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611aaa573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611ad357600060019250925050611ada565b9150600090505b94509492505050565b6000816004811115611af757611af7612171565b1415611b005750565b6001816004811115611b1457611b14612171565b1415611b625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610563565b6002816004811115611b7657611b76612171565b1415611bc45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610563565b6003816004811115611bd857611bd8612171565b14156106375760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610563565b600080608083901c15611c4657608092831c92015b604083901c15611c5857604092831c92015b602083901c15611c6a57602092831c92015b601083901c15611c7c57601092831c92015b600883901c15611c8e57600892831c92015b600483901c15611ca057600492831c92015b600283901c15611cb257600292831c92015b600183901c156104b05760010192915050565b6000818310611cd4578161058e565b5090919050565b600060ff8216601f8111156104b057604051632cd44ac360e21b815260040160405180910390fd5b828054611d0f90612085565b90600052602060002090601f016020900481019282611d315760008555611d77565b82601f10611d4a57805160ff1916838001178555611d77565b82800160010185558215611d77579182015b82811115611d77578251825591602001919060010190611d5c565b50610de29291505b80821115610de25760008155600101611d7f565b6000815180845260005b81811015611db957602081850181015186830182015201611d9d565b81811115611dcb576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061058e6020830184611d93565b80356001600160a01b0381168114611e0a57600080fd5b919050565b60008060408385031215611e2257600080fd5b611e2b83611df3565b946020939093013593505050565b600080600060608486031215611e4e57600080fd5b611e5784611df3565b9250611e6560208501611df3565b9150604084013590509250925092565b600060208284031215611e8757600080fd5b61058e82611df3565b60ff60f81b881681526000602060e081840152611eb060e084018a611d93565b8381036040850152611ec2818a611d93565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611f1457835183529284019291840191600101611ef8565b50909c9b505050505050505050505050565b600060208284031215611f3857600080fd5b5035919050565b803560ff81168114611e0a57600080fd5b60008060008060008060c08789031215611f6957600080fd5b611f7287611df3565b95506020870135945060408701359350611f8e60608801611f3f565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611fc357600080fd5b611fcc88611df3565b9650611fda60208901611df3565b95506040880135945060608801359350611ff660808901611f3f565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561202557600080fd5b61202e83611df3565b915061203c60208401611df3565b90509250929050565b6000806040838503121561205857600080fd5b61206183611df3565b9150602083013563ffffffff8116811461207a57600080fd5b809150509250929050565b600181811c9082168061209957607f821691505b602082108114156115df57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156120e3576120e36120ba565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015612110576121106120ba565b500390565b805160208083015191908110156115df5760001960209190910360031b1b16919050565b634e487b7160e01b600052601260045260246000fd5b60008261216c57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220b1a5415dfb484623b3ef4a812352140bf1d7ffd6f02656babe3e4e6c44eb81d864736f6c634300080c0033
0x6101606040523480156200001257600080fd5b5060405162002e8638038062002e868339810160408190526200003591620009f1565b60405180604001604052806007815260200166506f6c656d6f7360c81b81525080604051806040016040528060018152602001603160f81b81525060405180604001604052806007815260200166506f6c656d6f7360c81b81525060405180604001604052806004815260200163504c4d5360e01b8152508160039080519060200190620000c592919062000955565b508051620000db90600490602084019062000955565b505050620000f96005836200022860201b62000bd81790919060201c565b610120526200011681600662000228602090811b62000bd817901c565b61014052815160208084019190912060e052815190820120610100524660a052620001a460e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b038116620001f85760405162461bcd60e51b815260206004820152600b60248201526a696e76616c69642044414f60a81b60448201526064015b60405180910390fd5b62000221816200020b6012600a62000b2f565b6200021b90633b9aca0062000b40565b6200027c565b5062000c4e565b60006020835110156200024857620002408362000297565b905062000276565b826200025f83620002da60201b62000c0f1760201c565b815162000270926020019062000955565b5060ff90505b92915050565b620002938282620002dd60201b62000c121760201c565b5050565b600080829050601f81511115620002c5578260405163305a27a960e01b8152600401620001ef919062000b62565b8051620002d28262000bba565b179392505050565b90565b620002f482826200039060201b62000ca21760201c565b6001600160e01b03620003086200046b8216565b1115620003715760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401620001ef565b6200038a600b62000d6d6200047160201b178362000486565b50505050565b6001600160a01b038216620003e85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001ef565b620003f6600083836200062f565b80600260008282546200040a919062000be2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000293600083836200064c565b60025490565b60006200047f828462000be2565b9392505050565b82546000908190818115620004d55760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152620004ea565b60408051808201909152600080825260208201525b905080602001516001600160e01b031693506200050884868860201c565b92506000821180156200053557506200052062000664565b65ffffffffffff16816000015163ffffffff16145b15620005895762000551836200068160201b62000d791760201c565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff90921691909117905562000625565b866040518060400160405280620005c2620005a96200066460201b60201c565b65ffffffffffff16620006f060201b62000de61760201c565b63ffffffff168152602001620005e3866200068160201b62000d791760201c565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b620006478383836200064760201b62000e4b1760201c565b505050565b620006478383836200075760201b62000e501760201c565b60006200067c43620007a360201b62000e821760201c565b905090565b60006001600160e01b03821115620006ec5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401620001ef565b5090565b600063ffffffff821115620006ec5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401620001ef565b6200076f8383836200064760201b62000e4b1760201c565b6001600160a01b0383811660009081526009602052604080822054858416835291205462000647929182169116836200080c565b600065ffffffffffff821115620006ec5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401620001ef565b816001600160a01b0316836001600160a01b0316141580156200082f5750600081115b1562000647576001600160a01b03831615620008bc576001600160a01b0383166000908152600a602090815260408220829162000879919062000947901b62000ee9178562000486565b91509150846001600160a01b031660008051602062002e668339815191528383604051620008b1929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161562000647576001600160a01b0382166000908152600a602090815260408220829162000900919062000471901b62000d6d178562000486565b91509150836001600160a01b031660008051602062002e66833981519152838360405162000938929190918252602082015260400190565b60405180910390a25050505050565b60006200047f828462000bfd565b828054620009639062000c17565b90600052602060002090601f016020900481019282620009875760008555620009d2565b82601f10620009a257805160ff1916838001178555620009d2565b82800160010185558215620009d2579182015b82811115620009d2578251825591602001919060010190620009b5565b50620006ec9291505b80821115620006ec5760008155600101620009db565b60006020828403121562000a0457600080fd5b81516001600160a01b03811681146200047f57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a7357816000190482111562000a575762000a5762000a1c565b8085161562000a6557918102915b93841c939080029062000a37565b509250929050565b60008262000a8c5750600162000276565b8162000a9b5750600062000276565b816001811462000ab4576002811462000abf5762000adf565b600191505062000276565b60ff84111562000ad35762000ad362000a1c565b50506001821b62000276565b5060208310610133831016604e8410600b841016171562000b04575081810a62000276565b62000b10838362000a32565b806000190482111562000b275762000b2762000a1c565b029392505050565b60006200047f60ff84168362000a7b565b600081600019048311821515161562000b5d5762000b5d62000a1c565b500290565b600060208083528351808285015260005b8181101562000b915785810183015185820160400152820162000b73565b8181111562000ba4576000604083870101525b50601f01601f1916929092016040019392505050565b8051602080830151919081101562000bdc576000198160200360031b1b821691505b50919050565b6000821982111562000bf85762000bf862000a1c565b500190565b60008282101562000c125762000c1262000a1c565b500390565b600181811c9082168062000c2c57607f821691505b6020821081141562000bdc57634e487b7160e01b600052602260045260246000fd5b60805160a05160c05160e0516101005161012051610140516121bd62000ca960003960006106b30152600061068801526000611311015260006112e9015260006112440152600061126e0152600061129801526121bd6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de5780639ab24eb011610097578063c3cda52011610071578063c3cda52014610394578063d505accf146103a7578063dd62ed3e146103ba578063f1127ed8146103cd57600080fd5b80639ab24eb01461035b578063a457c2d71461036e578063a9059cbb1461038157600080fd5b806370a08231146102ca5780637ecebe00146102f357806384b0196e146103065780638e539e8c1461032157806391ddadf41461033457806395d89b411461035357600080fd5b8063395093511161014b578063587cde1e11610125578063587cde1e1461023e5780635c19a95c146102825780635d12fc0c146102975780636fcfff45146102a257600080fd5b806339509351146102105780633a46b1a8146102235780634bf5d7e91461023657600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806323b872dd146101e6578063313ce567146101f95780633644e51514610208575b600080fd5b61019b61040a565b6040516101a89190611de0565b60405180910390f35b6101c46101bf366004611e0f565b61049c565b60405190151581526020016101a8565b6002545b6040519081526020016101a8565b6101c46101f4366004611e39565b6104b6565b604051601281526020016101a8565b6101d86104da565b6101c461021e366004611e0f565b6104e9565b6101d8610231366004611e0f565b61050b565b61019b610595565b61026a61024c366004611e75565b6001600160a01b039081166000908152600960205260409020541690565b6040516001600160a01b0390911681526020016101a8565b610295610290366004611e75565b61062d565b005b6101d8633b9aca0081565b6102b56102b0366004611e75565b61063a565b60405163ffffffff90911681526020016101a8565b6101d86102d8366004611e75565b6001600160a01b031660009081526020819052604090205490565b6101d8610301366004611e75565b61065c565b61030e61067a565b6040516101a89796959493929190611e90565b6101d861032f366004611f26565b610703565b61033c61076a565b60405165ffffffffffff90911681526020016101a8565b61019b610775565b6101d8610369366004611e75565b610784565b6101c461037c366004611e0f565b610806565b6101c461038f366004611e0f565b610881565b6102956103a2366004611f50565b61088f565b6102956103b5366004611fa8565b6109c5565b6101d86103c8366004612012565b610b29565b6103e06103db366004612045565b610b54565b60408051825163ffffffff1681526020928301516001600160e01b031692810192909252016101a8565b60606003805461041990612085565b80601f016020809104026020016040519081016040528092919081815260200182805461044590612085565b80156104925780601f1061046757610100808354040283529160200191610492565b820191906000526020600020905b81548152906001019060200180831161047557829003601f168201915b5050505050905090565b6000336104aa818585610ef5565b60019150505b92915050565b6000336104c4858285611019565b6104cf85858561108d565b506001949350505050565b60006104e4611237565b905090565b6000336104aa8185856104fc8383610b29565b61050691906120d0565b610ef5565b600061051561076a565b65ffffffffffff16821061056c5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b0383166000908152600a6020526040902061058e9083611362565b9392505050565b6060436105a061076a565b65ffffffffffff16146105f55760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000006044820152606401610563565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b610637338261144b565b50565b6001600160a01b0381166000908152600a60205260408120546104b090610de6565b6001600160a01b0381166000908152600760205260408120546104b0565b6000606080828080836106ae7f000000000000000000000000000000000000000000000000000000000000000060056114c4565b6106d97f000000000000000000000000000000000000000000000000000000000000000060066114c4565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061070d61076a565b65ffffffffffff16821061075f5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610563565b6104b0600b83611362565b60006104e443610e82565b60606004805461041990612085565b6001600160a01b0381166000908152600a602052604081205480156107f3576001600160a01b0383166000908152600a60205260409020805460001983019081106107d1576107d16120e8565b60009182526020909120015464010000000090046001600160e01b03166107f6565b60005b6001600160e01b03169392505050565b600033816108148286610b29565b9050838110156108745760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610563565b6104cf8286868403610ef5565b6000336104aa81858561108d565b834211156108df5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610563565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610959906109519060a00160405160208183030381529060405280519060200120611568565b858585611595565b9050610964816115bd565b86146109b25760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610563565b6109bc818861144b565b50505050505050565b83421115610a155760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610563565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610a448c6115bd565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610a9f82611568565b90506000610aaf82878787611595565b9050896001600160a01b0316816001600160a01b031614610b125760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610563565b610b1d8a8a8a610ef5565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600a60205260409020805463ffffffff8416908110610b9857610b986120e8565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6000602083511015610bf457610bed836115e5565b90506104b0565b82828151610c059260200190611d03565b5060ff90506104b0565b90565b610c1c8282610ca2565b6002546001600160e01b031015610c8e5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610563565b610c9c600b610d6d83611623565b50505050565b6001600160a01b038216610cf85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610563565b8060026000828254610d0a91906120d0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610d6960008383611798565b5050565b600061058e82846120d0565b60006001600160e01b03821115610de25760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610563565b5090565b600063ffffffff821115610de25760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610563565b505050565b6001600160a01b03838116600090815260096020526040808220548584168352912054610e4b929182169116836117a3565b600065ffffffffffff821115610de25760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610563565b600061058e82846120fe565b6001600160a01b038316610f575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610563565b6001600160a01b038216610fb85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610563565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110258484610b29565b90506000198114610c9c57818110156110805760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610563565b610c9c8484848403610ef5565b6001600160a01b0383166110f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610563565b6001600160a01b0382166111535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610563565b6001600160a01b038316600090815260208190526040902054818110156111cb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610563565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610c9c848484611798565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561129057507f000000000000000000000000000000000000000000000000000000000000000046145b156112ba57507f000000000000000000000000000000000000000000000000000000000000000090565b6104e4604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8154600090818160058111156113bc57600061137d846118e0565b61138790856120fe565b600088815260209020909150869082015463ffffffff1611156113ac578091506113ba565b6113b78160016120d0565b92505b505b808210156114095760006113d083836119c5565b600088815260209020909150869082015463ffffffff1611156113f557809150611403565b6114008160016120d0565b92505b506113bc565b8015611435576000868152602090208101600019015464010000000090046001600160e01b0316611438565b60005b6001600160e01b03169695505050505050565b6001600160a01b038281166000818152600960208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610c9c8284836117a3565b606060ff83146114d757610bed836119e0565b8180546114e390612085565b80601f016020809104026020016040519081016040528092919081815260200182805461150f90612085565b801561155c5780601f106115315761010080835404028352916020019161155c565b820191906000526020600020905b81548152906001019060200180831161153f57829003601f168201915b505050505090506104b0565b60006104b0611575611237565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006115a687878787611a1f565b915091506115b381611ae3565b5095945050505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600080829050601f81511115611610578260405163305a27a960e01b81526004016105639190611de0565b805161161b82612115565b179392505050565b825460009081908181156116705760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152611685565b60408051808201909152600080825260208201525b905080602001516001600160e01b031693506116a584868863ffffffff16565b92506000821180156116cf57506116ba61076a565b65ffffffffffff16816000015163ffffffff16145b15611714576116dd83610d79565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff90921691909117905561178e565b86604051806040016040528061173861172b61076a565b65ffffffffffff16610de6565b63ffffffff16815260200161174c86610d79565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b610e4b838383610e50565b816001600160a01b0316836001600160a01b0316141580156117c55750600081115b15610e4b576001600160a01b03831615611853576001600160a01b0383166000908152600a60205260408120819061180090610ee985611623565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611848929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610e4b576001600160a01b0382166000908152600a60205260408120819061188990610d6d85611623565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516118d1929190918252602082015260400190565b60405180910390a25050505050565b6000816118ef57506000919050565b600060016118fc84611c31565b901c6001901b9050600181848161191557611915612139565b048201901c9050600181848161192d5761192d612139565b048201901c9050600181848161194557611945612139565b048201901c9050600181848161195d5761195d612139565b048201901c9050600181848161197557611975612139565b048201901c9050600181848161198d5761198d612139565b048201901c905060018184816119a5576119a5612139565b048201901c905061058e818285816119bf576119bf612139565b04611cc5565b60006119d4600284841861214f565b61058e908484166120d0565b606060006119ed83611cdb565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611a565750600090506003611ada565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611aaa573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611ad357600060019250925050611ada565b9150600090505b94509492505050565b6000816004811115611af757611af7612171565b1415611b005750565b6001816004811115611b1457611b14612171565b1415611b625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610563565b6002816004811115611b7657611b76612171565b1415611bc45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610563565b6003816004811115611bd857611bd8612171565b14156106375760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610563565b600080608083901c15611c4657608092831c92015b604083901c15611c5857604092831c92015b602083901c15611c6a57602092831c92015b601083901c15611c7c57601092831c92015b600883901c15611c8e57600892831c92015b600483901c15611ca057600492831c92015b600283901c15611cb257600292831c92015b600183901c156104b05760010192915050565b6000818310611cd4578161058e565b5090919050565b600060ff8216601f8111156104b057604051632cd44ac360e21b815260040160405180910390fd5b828054611d0f90612085565b90600052602060002090601f016020900481019282611d315760008555611d77565b82601f10611d4a57805160ff1916838001178555611d77565b82800160010185558215611d77579182015b82811115611d77578251825591602001919060010190611d5c565b50610de29291505b80821115610de25760008155600101611d7f565b6000815180845260005b81811015611db957602081850181015186830182015201611d9d565b81811115611dcb576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061058e6020830184611d93565b80356001600160a01b0381168114611e0a57600080fd5b919050565b60008060408385031215611e2257600080fd5b611e2b83611df3565b946020939093013593505050565b600080600060608486031215611e4e57600080fd5b611e5784611df3565b9250611e6560208501611df3565b9150604084013590509250925092565b600060208284031215611e8757600080fd5b61058e82611df3565b60ff60f81b881681526000602060e081840152611eb060e084018a611d93565b8381036040850152611ec2818a611d93565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611f1457835183529284019291840191600101611ef8565b50909c9b505050505050505050505050565b600060208284031215611f3857600080fd5b5035919050565b803560ff81168114611e0a57600080fd5b60008060008060008060c08789031215611f6957600080fd5b611f7287611df3565b95506020870135945060408701359350611f8e60608801611f3f565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611fc357600080fd5b611fcc88611df3565b9650611fda60208901611df3565b95506040880135945060608801359350611ff660808901611f3f565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561202557600080fd5b61202e83611df3565b915061203c60208401611df3565b90509250929050565b6000806040838503121561205857600080fd5b61206183611df3565b9150602083013563ffffffff8116811461207a57600080fd5b809150509250929050565b600181811c9082168061209957607f821691505b602082108114156115df57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156120e3576120e36120ba565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015612110576121106120ba565b500390565b805160208083015191908110156115df5760001960209190910360031b1b16919050565b634e487b7160e01b600052601260045260246000fd5b60008261216c57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220b1a5415dfb484623b3ef4a812352140bf1d7ffd6f02656babe3e4e6c44eb81d864736f6c634300080c0033dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7240000000000000000000000002b6ec277bec8b7b1b19efca00c1969cac63c9f0f