0x608060405234801561001057600080fd5b506124e5806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001725760003560e01c8063715018a611620000e1578063ccf5a77c116200008d578063dc9685a7116200006f578063dc9685a71462000478578063f153768614620004a4578063f2fde38b14620004da5762000172565b8063ccf5a77c146200042c578063d82d053114620004365762000172565b8063b869d89a11620000c3578063b869d89a1462000380578063b9730eaf14620003ac578063c86415cb14620003e25762000172565b8063715018a6146200036c5780638da5cb5b14620003765762000172565b80632c3da59c116200014157806341bdc8b5116200012357806341bdc8b514620002cc578063485cc9551462000302578063589b3c6414620003405762000172565b80632c3da59c14620002965780633339df9614620002c25762000172565b806303e418c214620001775780630e71e25114620001cd5780631ecf6f9f146200022c57806328b1aea0146200024c575b600080fd5b620001ad600480360360208110156200018f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000510565b6040805163ffffffff909316835260208301919091528051918290030190f35b6200020360048036036020811015620001e557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000532565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b62000203600480360360208110156200024457600080fd5b503562000602565b62000294600480360360608110156200026457600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166200062a565b005b6200020360048036036040811015620002ae57600080fd5b5063ffffffff8135169060200135620006f6565b6200020362000793565b6200029460048036036020811015620002e457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16620007af565b62000294600480360360408110156200031a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516620008a3565b62000203600480360360408110156200035857600080fd5b5063ffffffff813516906020013562000a0b565b6200029462000a4a565b6200020362000af9565b62000203600480360360408110156200039857600080fd5b5063ffffffff813516906020013562000b15565b620001ad60048036036020811015620003c457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000bfa565b6200041860048036036020811015620003fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000c45565b604080519115158252519081900360200190f35b6200020362000c8b565b62000203600480360360408110156200044e57600080fd5b50803563ffffffff16906020013573ffffffffffffffffffffffffffffffffffffffff1662000ca7565b62000203600480360360408110156200049057600080fd5b5063ffffffff813516906020013562000cbf565b620001ad60048036036020811015620004bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000d2d565b6200029460048036036020811015620004f257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000dae565b6098602052600090815260409020805460019091015463ffffffff9091169082565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff168083526001909101549282019290925290620005e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2172657072000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620005fb8160000151826020015162000cbf565b9392505050565b60996020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6200063462000f57565b73ffffffffffffffffffffffffffffffffffffffff166200065462000af9565b73ffffffffffffffffffffffffffffffffffffffff1614620006d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b620006e483838362000f5b565b620006f18383836200102d565b505050565b60008062000705848462000a0b565b905073ffffffffffffffffffffffffffffffffffffffff81166200078a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21746f6b656e0000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b90505b92915050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b620007b962000f57565b73ffffffffffffffffffffffffffffffffffffffff16620007d962000af9565b73ffffffffffffffffffffffffffffffffffffffff16146200085c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff1680620008bf5750620008bf62001147565b80620008ce575060005460ff16155b62000925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff161580156200098c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055620009d7826200115a565b8015620006f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b600062000a17620012c1565b63ffffffff168363ffffffff16141562000a3e5762000a3682620012d2565b90506200078d565b6200078a838362000cbf565b62000a5462000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000a7462000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000af757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b600062000b2162000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000b4162000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000bc457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000bd0838362000a0b565b905073ffffffffffffffffffffffffffffffffffffffff81166200078d576200078a8383620012d5565b73ffffffffffffffffffffffffffffffffffffffff166000908152609860209081526040918290208251808401909352805463ffffffff168084526001909101549290910182905291565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602052604081205463ffffffff161562000c805750600062000c86565b50803b15155b919050565b60975473ffffffffffffffffffffffffffffffffffffffff1681565b60006200078a8362000cb98462001600565b62000a0b565b60008062000cce848462001619565b9050600062000cff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831662001672565b60009081526099602052604090205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff1680835260019091015492820192909252829162000d9b5762000d86620012c1565b925062000d938462001600565b915062000da8565b8051602082015190935091505b50915091565b62000db862000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000dd862000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000e5b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811662000ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620024856026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b63ffffffff831662000fce57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f216e756c6c20646f6d61696e0000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260986020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff93909316929092178255600190910155565b73ffffffffffffffffffffffffffffffffffffffff8116620010b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f216e756c6c207265707200000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000620010be848462001619565b90506000620010ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831662001672565b600090815260996020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505050565b60006200115430620016b5565b15905090565b600054610100900460ff16806200117657506200117662001147565b8062001185575060005460ff16155b620011dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff161580156200124357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556200128d620016bb565b8015620012bd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b6000620012cd620017eb565b905090565b90565b60975460405160009173ffffffffffffffffffffffffffffffffffffffff1690620013009062001f14565b73ffffffffffffffffffffffffffffffffffffffff909116815260406020820181905260008183018190529051918290036060019190f0801580156200134a573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200139657600080fd5b505af1158015620013ab573d6000803e3d6000fd5b50505050600080620013be85856200188a565b915091508273ffffffffffffffffffffffffffffffffffffffff1663654935f4838360126040518463ffffffff1660e01b8152600401808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156200143a57818101518382015260200162001420565b50505050905090810190601f168015620014685780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200149d57818101518382015260200162001483565b50505050905090810190601f168015620014cb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015620014ee57600080fd5b505af115801562001503573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6200152d62000af9565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200157a57600080fd5b505af11580156200158f573d6000803e3d6000fd5b50505050620015a08585856200102d565b620015ad85858562000f5b565b8273ffffffffffffffffffffffffffffffffffffffff16848663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a4505092915050565b73ffffffffffffffffffffffffffffffffffffffff1690565b60006200078a6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526024808201879052825180830390910181526044909101909152906200196a565b600080620016808362001990565b6bffffffffffffffffffffffff16905060006200169d84620019a4565b6bffffffffffffffffffffffff169091209392505050565b3b151590565b600054610100900460ff1680620016d75750620016d762001147565b80620016e6575060005460ff16155b6200173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff16158015620017a457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b620017ae620019b8565b620017b862001ad2565b8015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b1580156200185757600080fd5b505afa1580156200186c573d6000803e3d6000fd5b505050506040513d60208110156200188357600080fd5b5051905090565b60608060006200189a8462001c6c565b915050620018a88562001d44565b6040805160b09290921b7fffffffffffffffffffff000000000000000000000000000000000000000000001660208301527f2e00000000000000000000000000000000000000000000000000000000000000602a83015260e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016602b8301528051808303600f9081018252602f8401818152606f85019093529095509091604f01818036833701905050915060208301516020830152509250929050565b8151600090602084016200198764ffffffffff8516828462001da6565b95945050505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600054610100900460ff1680620019d45750620019d462001147565b80620019e3575060005460ff16155b62001a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff16158015620017b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168062001aee575062001aee62001147565b8062001afd575060005460ff16155b62001b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff1615801562001bbb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600062001bc762000f57565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080601f5b600f8160ff16111562001cd95760ff600882021684901c62001c948162001e03565b61ffff16841793508160ff1660101462001cb057601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001c72565b50600f5b60ff8160ff16101562000da85760ff600882021684901c62001cff8162001e03565b61ffff16831792508160ff1660001462001d1b57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001cdd565b60006030815b600a8160ff16101562001d9f5760ff600882021682600a63ffffffff87160663ffffffff160169ffffffffffffffffffff16901b83179250600a8463ffffffff168162001d9357fe5b04935060010162001d4a565b5050919050565b60008062001db5848462001e37565b905060405181111562001dc6575060005b8062001df6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050620005fb565b6200198785858562001eaa565b600062001e1760048360ff16901c62001ebd565b60ff161760081b62ffff001662001e2e8262001ebd565b60ff1617919050565b818101828110156200078d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b6040805180820190915260108082527f30313233343536373839616263646566000000000000000000000000000000006020830152600091600f8416918290811062001f0557fe5b016020015160f81c9392505050565b6105628062001f238339019056fe60a06040526040516105623803806105628339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506100f0826101d060201b6100291760201c565b610134576040805162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015290519081900360640190fd5b6001600160601b0319606083901b166080526000610151836101d6565b9050610166816101d060201b6100291760201c565b6101b7576040805162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e747261637400604482015290519081900360640190fd5b8151156101c8576101c881836102d6565b50505061038f565b3b151590565b604051600090819081906001600160a01b0385169082818181855afa9150503d8060008114610221576040519150601f19603f3d011682016040523d82523d6000602084013e610226565b606091505b50915091508181906102b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561027b578181015183820152602001610263565b50505050905090810190601f1680156102a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156102cc57600080fd5b5051949350505050565b6000826001600160a01b0316826040518082805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610372576040519150601f19603f3d011682016040523d82523d6000602084013e610377565b606091505b505090508061038a573d6000803e3d6000fd5b505050565b60805160601c6101b76103ab60003980603652506101b76000f3fe60806040523661001357610011610017565b005b6100115b61002761002261002f565b61005f565b565b3b151590565b600061005a7f0000000000000000000000000000000000000000000000000000000000000000610083565b905090565b3660008037600080366000845af43d6000803e80801561007e573d6000f35b3d6000fd5b6040516000908190819073ffffffffffffffffffffffffffffffffffffffff85169082818181855afa9150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081819061018a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156101a057600080fd5b505194935050505056fea164736f6c6343000706000a4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a