0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612b1280620000f46000396000f3fe60806040526004361061021a5760003560e01c80635c975abb1161012357806395d89b41116100ab578063c87b56dd1161006f578063c87b56dd146105cc578063e985e9c5146105ec578063eb8d244414610635578063efed7b7c14610650578063f2fde38b1461066757600080fd5b806395d89b4114610549578063a22cb4651461055e578063a8131d3b1461057e578063b88d4fde14610595578063bfb2d32e146105b557600080fd5b8063775b9c13116100f2578063775b9c13146104c05780638129fc1c146104e05780638456cb59146104f557806384bbc2291461050a5780638da5cb5b1461052a57600080fd5b80635c975abb146104535780636352211e1461046b57806370a082311461048b578063715018a6146104ab57600080fd5b806338629dfb116101a657806342842e0e1161017557806342842e0e146103c057806342966c68146103e05780634bc96248146104005780634f6ccce71461042057806357f327a91461044057600080fd5b806338629dfb1461035f5780633ccfd60b146103765780633f4ba83a1461038b57806340d097c3146103a057600080fd5b8063142086a2116101ed578063142086a2146102d057806318160ddd146102f557806323b872dd1461030a5780632f745c591461032a57806334918dfd1461034a57600080fd5b806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276578063095ea7b3146102ae575b600080fd5b34801561022b57600080fd5b5061023f61023a36600461268e565b610687565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b50610269610698565b60405161024b9190612786565b34801561028257600080fd5b506102966102913660046126c6565b61072a565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b506102ce6102c93660046125b6565b610751565b005b3480156102dc57600080fd5b506102e76101c85481565b60405190815260200161024b565b34801561030157600080fd5b506099546102e7565b34801561031657600080fd5b506102ce610325366004612489565b61086c565b34801561033657600080fd5b506102e76103453660046125b6565b61089e565b34801561035657600080fd5b506102ce610934565b34801561036b57600080fd5b506102e76101ca5481565b34801561038257600080fd5b506102ce610951565b34801561039757600080fd5b506102ce61098c565b3480156103ac57600080fd5b506102ce6103bb36600461243d565b61099e565b3480156103cc57600080fd5b506102ce6103db366004612489565b6109cd565b3480156103ec57600080fd5b506102ce6103fb3660046126c6565b6109e8565b34801561040c57600080fd5b506102ce61041b3660046125b6565b610a19565b34801561042c57600080fd5b506102e761043b3660046126c6565b610a66565b6102ce61044e3660046126c6565b610b07565b34801561045f57600080fd5b5060fb5460ff1661023f565b34801561047757600080fd5b506102966104863660046126c6565b610d1c565b34801561049757600080fd5b506102e76104a636600461243d565b610d7c565b3480156104b757600080fd5b506102ce610e02565b3480156104cc57600080fd5b506102ce6104db3660046125df565b610e14565b3480156104ec57600080fd5b506102ce610eed565b34801561050157600080fd5b506102ce6110a0565b34801561051657600080fd5b506102ce6105253660046126c6565b6110b0565b34801561053657600080fd5b5061012d546001600160a01b0316610296565b34801561055557600080fd5b506102696112be565b34801561056a57600080fd5b506102ce61057936600461257c565b6112cd565b34801561058a57600080fd5b506102e76101c45481565b3480156105a157600080fd5b506102ce6105b03660046124c4565b6112d8565b3480156105c157600080fd5b506102e76101c55481565b3480156105d857600080fd5b506102696105e73660046126c6565b611310565b3480156105f857600080fd5b5061023f610607366004612457565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b34801561064157600080fd5b506101cb5461023f9060ff1681565b34801561065c57600080fd5b506102e76101c65481565b34801561067357600080fd5b506102ce61068236600461243d565b61136e565b6000610692826113e4565b92915050565b6060606580546106a7906129d7565b80601f01602080910402602001604051908101604052809291908181526020018280546106d3906129d7565b80156107205780601f106106f557610100808354040283529160200191610720565b820191906000526020600020905b81548152906001019060200180831161070357829003601f168201915b5050505050905090565b600061073582611409565b506000908152606960205260409020546001600160a01b031690565b600061075c82610d1c565b9050806001600160a01b0316836001600160a01b031614156107cf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806107eb57506107eb8133610607565b61085d5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016107c6565b6108678383611468565b505050565b610877335b826114d6565b6108935760405162461bcd60e51b81526004016107c6906128ca565b610867838383611555565b60006108a983610d7c565b821061090b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107c6565b506001600160a01b03919091166000908152609760209081526040808320938352929052205490565b61093c6116fc565b6101cb805460ff19811660ff90911615179055565b6109596116fc565b6040514790339082156108fc029083906000818181858888f19350505050158015610988573d6000803e3d6000fd5b5050565b6109946116fc565b61099c611757565b565b6109a66116fc565b60006109b26101c35490565b90506109c36101c380546001019055565b61098882826117a9565b610867838383604051806020016040528060008152506112d8565b6109f133610871565b610a0d5760405162461bcd60e51b81526004016107c6906128ca565b610a16816117c3565b50565b610a216116fc565b60005b81811015610867576000610a386101c35490565b9050610a496101c380546001019055565b610a5384826117a9565b5080610a5e81612a12565b915050610a24565b6000610a7160995490565b8210610ad45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107c6565b60998281548110610af557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6002610191541415610b5b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107c6565b600261019155610b696117cc565b6101cb5460ff16610b8c5760405162461bcd60e51b81526004016107c69061283e565b6101c5543360009081526101cd6020526040902054610bab9083611812565b1115610bf05760405162461bcd60e51b815260206004820152601460248201527343616e206f6e6c79206d696e742032204e46547360601b60448201526064016107c6565b6101c6546101c754610c029083611812565b1115610c205760405162461bcd60e51b81526004016107c690612799565b6101c4543490610c30908361181e565b1115610c7e5760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107c6565b60005b81811015610d12576000610c956101c35490565b9050610ca66101c380546001019055565b6101c6546101c7541015610cff57610cbe33826117a9565b6101c754610ccd906001611812565b6101c7553360009081526101cd6020526040902054610ced906001611812565b3360009081526101cd60205260409020555b5080610d0a81612a12565b915050610c81565b5050600161019155565b6000818152606760205260408120546001600160a01b0316806106925760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107c6565b60006001600160a01b038216610de65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016107c6565b506001600160a01b031660009081526068602052604090205490565b610e0a6116fc565b61099c600061182a565b610e1c6116fc565b60005b8151811015610988576101cc6000838381518110610e4d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900460ff16156101cc6000848481518110610ea957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610ee581612a12565b915050610e1f565b600054610100900460ff1615808015610f0d5750600054600160ff909116105b80610f275750303b158015610f27575060005460ff166001145b610f8a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107c6565b6000805460ff191660011790558015610fad576000805461ff0019166101001790555b610ff76040518060400160405280600b81526020016a5368656570526163696e6760a81b81525060405180604001604052806005815260200164053686565760dc1b81525061187d565b610fff6118ae565b6110076118ae565b61100f6118d5565b611017611904565b61101f6118ae565b611027611933565b662386f26fc100006101c45560026101c555600a6101ca55611f406101c6556103c06101c8556101cb805460ff191690558015610a16576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6110a86116fc565b61099c611962565b60026101915414156111045760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107c6565b6002610191556111126117cc565b6101cb5460ff166111355760405162461bcd60e51b81526004016107c69061283e565b3360009081526101cc602052604090205460ff166111955760405162461bcd60e51b815260206004820152601860248201527f4275796572206d7573742062652077686974656c6973742e000000000000000060448201526064016107c6565b6101ca543360009081526101cd60205260409020546111b49083611812565b11156111fa5760405162461bcd60e51b815260206004820152601560248201527443616e206f6e6c79206d696e74203130204e46547360581b60448201526064016107c6565b6101c8546101c95461120c9083611812565b111561122a5760405162461bcd60e51b81526004016107c690612799565b60005b81811015610d125760006112416101c35490565b90506112526101c380546001019055565b6101c8546101c95410156112ab5761126a33826117a9565b6101c954611279906001611812565b6101c9553360009081526101cd6020526040902054611299906001611812565b3360009081526101cd60205260409020555b50806112b681612a12565b91505061122d565b6060606680546106a7906129d7565b61098833838361199f565b6112e233836114d6565b6112fe5760405162461bcd60e51b81526004016107c6906128ca565b61130a84848484611a6e565b50505050565b6060600061131c611aa1565b9050600081511161133c5760405180602001604052806000815250611367565b8061134684611ac1565b60405160200161135792919061270a565b6040516020818303038152906040525b9392505050565b6113766116fc565b6001600160a01b0381166113db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c6565b610a168161182a565b60006001600160e01b0319821663780e9d6360e01b1480610692575061069282611bdb565b6000818152606760205260409020546001600160a01b0316610a165760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107c6565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061149d82610d1c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806114e283610d1c565b9050806001600160a01b0316846001600160a01b0316148061152957506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b8061154d5750836001600160a01b03166115428461072a565b6001600160a01b0316145b949350505050565b826001600160a01b031661156882610d1c565b6001600160a01b0316146115cc5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107c6565b6001600160a01b03821661162e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107c6565b611639838383611c2b565b611644600082611468565b6001600160a01b038316600090815260686020526040812080546001929061166d908490612994565b90915550506001600160a01b038216600090815260686020526040812080546001929061169b908490612949565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61012d546001600160a01b0316331461099c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107c6565b61175f611c3e565b60fb805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610988828260405180602001604052806000815250611c87565b610a1681611cba565b60fb5460ff161561099c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107c6565b60006113678284612949565b60006113678284612975565b61012d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166118a45760405162461bcd60e51b81526004016107c69061287f565b6109888282611cfa565b600054610100900460ff1661099c5760405162461bcd60e51b81526004016107c69061287f565b600054610100900460ff166118fc5760405162461bcd60e51b81526004016107c69061287f565b61099c611d48565b600054610100900460ff1661192b5760405162461bcd60e51b81526004016107c69061287f565b61099c611d7b565b600054610100900460ff1661195a5760405162461bcd60e51b81526004016107c69061287f565b61099c611dab565b61196a6117cc565b60fb805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861178c3390565b816001600160a01b0316836001600160a01b03161415611a015760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107c6565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a79848484611555565b611a8584848484611dda565b61130a5760405162461bcd60e51b81526004016107c6906127ec565b6060604051806080016040528060438152602001612a9a60439139905090565b606081611ae55750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b0f5780611af981612a12565b9150611b089050600a83612961565b9150611ae9565b60008167ffffffffffffffff811115611b3857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b62576020820181803683370190505b5090505b841561154d57611b77600183612994565b9150611b84600a86612a2d565b611b8f906030612949565b60f81b818381518110611bb257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611bd4600a86612961565b9450611b66565b60006001600160e01b031982166380ac58cd60e01b1480611c0c57506001600160e01b03198216635b5e139f60e01b145b8061069257506301ffc9a760e01b6001600160e01b0319831614610692565b611c336117cc565b610867838383611ee7565b60fb5460ff1661099c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107c6565b611c918383611f9f565b611c9e6000848484611dda565b6108675760405162461bcd60e51b81526004016107c6906127ec565b611cc3816120ed565b600081815260c9602052604090208054611cdc906129d7565b159050610a1657600081815260c960205260408120610a169161234e565b600054610100900460ff16611d215760405162461bcd60e51b81526004016107c69061287f565b8151611d34906065906020850190612388565b508051610867906066906020840190612388565b600054610100900460ff16611d6f5760405162461bcd60e51b81526004016107c69061287f565b60fb805460ff19169055565b600054610100900460ff16611da25760405162461bcd60e51b81526004016107c69061287f565b61099c3361182a565b600054610100900460ff16611dd25760405162461bcd60e51b81526004016107c69061287f565b600161019155565b60006001600160a01b0384163b15611edc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e1e903390899088908890600401612749565b602060405180830381600087803b158015611e3857600080fd5b505af1925050508015611e68575060408051601f3d908101601f19168201909252611e65918101906126aa565b60015b611ec2573d808015611e96576040519150601f19603f3d011682016040523d82523d6000602084013e611e9b565b606091505b508051611eba5760405162461bcd60e51b81526004016107c6906127ec565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061154d565b506001949350505050565b6001600160a01b038316611f4257611f3d81609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b611f65565b816001600160a01b0316836001600160a01b031614611f6557611f658382612194565b6001600160a01b038216611f7c5761086781612231565b826001600160a01b0316826001600160a01b03161461086757610867828261230a565b6001600160a01b038216611ff55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107c6565b6000818152606760205260409020546001600160a01b03161561205a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107c6565b61206660008383611c2b565b6001600160a01b038216600090815260686020526040812080546001929061208f908490612949565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006120f882610d1c565b905061210681600084611c2b565b612111600083611468565b6001600160a01b038116600090815260686020526040812080546001929061213a908490612994565b909155505060008281526067602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600060016121a184610d7c565b6121ab9190612994565b6000838152609860205260409020549091508082146121fe576001600160a01b03841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b5060009182526098602090815260408084208490556001600160a01b039094168352609781528383209183525290812055565b60995460009061224390600190612994565b6000838152609a60205260408120546099805493945090928490811061227957634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080609983815481106122a857634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152609a909152604080822084905585825281205560998054806122ee57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061231583610d7c565b6001600160a01b039093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b50805461235a906129d7565b6000825580601f1061236a575050565b601f016020900490600052602060002090810190610a16919061240c565b828054612394906129d7565b90600052602060002090601f0160209004810192826123b657600085556123fc565b82601f106123cf57805160ff19168380011785556123fc565b828001600101855582156123fc579182015b828111156123fc5782518255916020019190600101906123e1565b5061240892915061240c565b5090565b5b80821115612408576000815560010161240d565b80356001600160a01b038116811461243857600080fd5b919050565b60006020828403121561244e578081fd5b61136782612421565b60008060408385031215612469578081fd5b61247283612421565b915061248060208401612421565b90509250929050565b60008060006060848603121561249d578081fd5b6124a684612421565b92506124b460208501612421565b9150604084013590509250925092565b600080600080608085870312156124d9578081fd5b6124e285612421565b935060206124f1818701612421565b935060408601359250606086013567ffffffffffffffff80821115612514578384fd5b818801915088601f830112612527578384fd5b81358181111561253957612539612a6d565b61254b601f8201601f19168501612918565b91508082528984828501011115612560578485fd5b8084840185840137810190920192909252939692955090935050565b6000806040838503121561258e578182fd5b61259783612421565b9150602083013580151581146125ab578182fd5b809150509250929050565b600080604083850312156125c8578182fd5b6125d183612421565b946020939093013593505050565b600060208083850312156125f1578182fd5b823567ffffffffffffffff80821115612608578384fd5b818501915085601f83011261261b578384fd5b81358181111561262d5761262d612a6d565b8060051b915061263e848301612918565b8181528481019084860184860187018a1015612658578788fd5b8795505b838610156126815761266d81612421565b83526001959095019491860191860161265c565b5098975050505050505050565b60006020828403121561269f578081fd5b813561136781612a83565b6000602082840312156126bb578081fd5b815161136781612a83565b6000602082840312156126d7578081fd5b5035919050565b600081518084526126f68160208601602086016129ab565b601f01601f19169290920160200192915050565b6000835161271c8184602088016129ab565b8351908301906127308183602088016129ab565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061277c908301846126de565b9695505050505050565b60208152600061136760208301846126de565b60208082526033908201527f507572636861736520776f756c6420657863656564206d617820737570706c79604082015272206f662053686565707320666f722073616c6560681b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526021908201527f53616c65206d7573742062652061637469766520746f206d696e7420536865656040820152600760fc1b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561294157612941612a6d565b604052919050565b6000821982111561295c5761295c612a41565b500190565b60008261297057612970612a57565b500490565b600081600019048311821515161561298f5761298f612a41565b500290565b6000828210156129a6576129a6612a41565b500390565b60005b838110156129c65781810151838201526020016129ae565b8381111561130a5750506000910152565b600181811c908216806129eb57607f821691505b60208210811415612a0c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a2657612a26612a41565b5060010190565b600082612a3c57612a3c612a57565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a1657600080fdfe697066733a2f2f6261667962656968686e70637266776766796d62737768697372796d787364716b34757a78666e32766f72696d336c346e746e34347834723477712fa2646970667358221220f5c4c61da8aa6943c238cc583ac24a4a3067528b8854420840c61abaa544bdcd64736f6c63430008040033