60806040523480156200001157600080fd5b5060405162001fcf38038062001fcf8339810160408190526200003491620001fe565b80620000408162000124565b50600380546001600160a01b0319166001600160a01b03841617905560046200006a858262000342565b50600562000079848262000342565b506003546001600160a01b031660009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560205260408120805461ffff9290620000c79084906200040e565b909155505060035460408051600080825261ffff60208301526001600160a01b03909316929182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505062000436565b600262000132828262000342565b5050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200015e57600080fd5b81516001600160401b03808211156200017b576200017b62000136565b604051601f8301601f19908116603f01168101908282118183101715620001a657620001a662000136565b8160405283815260209250866020858801011115620001c457600080fd5b600091505b83821015620001e85785820183015181830184015290820190620001c9565b6000602085830101528094505050505092915050565b600080600080608085870312156200021557600080fd5b84516001600160401b03808211156200022d57600080fd5b6200023b888389016200014c565b955060208701519150808211156200025257600080fd5b62000260888389016200014c565b604088015190955091506001600160a01b03821682146200028057600080fd5b6060870151919350808211156200029657600080fd5b50620002a5878288016200014c565b91505092959194509250565b600181811c90821680620002c657607f821691505b602082108103620002e757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033d576000816000526020600020601f850160051c81016020861015620003185750805b601f850160051c820191505b81811015620003395782815560010162000324565b5050505b505050565b81516001600160401b038111156200035e576200035e62000136565b62000376816200036f8454620002b1565b84620002ed565b602080601f831160018114620003ae5760008415620003955750858301515b600019600386901b1c1916600185901b17855562000339565b600085815260208120601f198616915b82811015620003df57888601518255948401946001909101908401620003be565b5085821015620003fe5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200043057634e487b7160e01b600052601160045260246000fd5b92915050565b611b8980620004466000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c80636423db3411610097578063e985e9c511610066578063e985e9c51461021a578063ece8c31c14610263578063f242432a14610276578063fc25a4da1461028957600080fd5b80636423db341461017557806395d89b41146101f7578063a22cb465146101ff578063a538bd901461021257600080fd5b8063231e214a116100d3578063231e214a146101755780632eb2c2d61461017f5780634e1273f41461019257806363d1302c146101b257600080fd5b8062fdd58e1461010457806301ffc9a71461012a57806306fdde031461014d5780630e89341c14610162575b600080fd5b6101176101123660046113b0565b6102b1565b6040519081526020015b60405180910390f35b61013d61013836600461140b565b610323565b6040519015158152602001610121565b610155610406565b6040516101219190611493565b6101556101703660046114a6565b610494565b61017d610528565b005b61017d61018d36600461165e565b6105e2565b6101a56101a036600461176e565b6106ad565b604051610121919061180e565b6003546101d29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610121565b610155610793565b61017d61020d366004611821565b6107a0565b61017d6107af565b61013d61022836600461185d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b61017d610271366004611890565b61087b565b61017d6102843660046118cd565b61098d565b610117610297366004611932565b600060208181529281526040808220909352908152205481565b60008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205481036102ed5750600161031d565b5060008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806103b657507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061031d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461031d565b6004805461041390611955565b80601f016020809104026020016040519081016040528092919081815260200182805461043f90611955565b801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b505050505081565b6060600280546104a390611955565b80601f01602080910402602001604051908101604052809291908181526020018280546104cf90611955565b801561051c5780601f106104f15761010080835404028352916020019161051c565b820191906000526020600020905b8154815290600101906020018083116104ff57829003601f168201915b50505050509050919050565b600354604080516000815261ffff602082015273ffffffffffffffffffffffffffffffffffffffff90921691829182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460035473ffffffffffffffffffffffffffffffffffffffff1660009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560205260408120805461ffff92906105db9084906119d7565b9091555050565b3373ffffffffffffffffffffffffffffffffffffffff8616811480159061063c575073ffffffffffffffffffffffffffffffffffffffff80871660009081526001602090815260408083209385168352929052205460ff16155b15610698576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152871660248201526044015b60405180910390fd5b6106a58686868686610a4b565b505050505050565b606081518351146106f757815183516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161068f565b6000835167ffffffffffffffff811115610713576107136114bf565b60405190808252806020026020018201604052801561073c578160200160208202803683370190505b50905060005b845181101561078b57602080820286010151610766906020808402870101516102b1565b828281518110610778576107786119ea565b6020908102919091010152600101610742565b509392505050565b6005805461041390611955565b6107ab338383610aff565b5050565b60035473ffffffffffffffffffffffffffffffffffffffff1660008181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602090815260408083205481518481529283015291929182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460035473ffffffffffffffffffffffffffffffffffffffff1660009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb56020526040812055565b80518061088757600080fd5b60005b818161ffff16101561092d576000838261ffff16815181106108ae576108ae6119ea565b602090810291909101810151600354604080516000815260019481019490945291935073ffffffffffffffffffffffffffffffffffffffff8085169391169182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4508061092581611a19565b91505061088a565b5060035473ffffffffffffffffffffffffffffffffffffffff1660009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081208054839290610984908490611a3a565b90915550505050565b3373ffffffffffffffffffffffffffffffffffffffff861681148015906109e7575073ffffffffffffffffffffffffffffffffffffffff80871660009081526001602090815260408083209385168352929052205460ff16155b15610a3e576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528716602482015260440161068f565b6106a58686868686610be7565b73ffffffffffffffffffffffffffffffffffffffff8416610a9b576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526000600482015260240161068f565b73ffffffffffffffffffffffffffffffffffffffff8516610aeb576040517f01a835140000000000000000000000000000000000000000000000000000000081526000600482015260240161068f565b610af88585858585610cc2565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b4f576040517fced3e1000000000000000000000000000000000000000000000000000000000081526000600482015260240161068f565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8416610c37576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526000600482015260240161068f565b73ffffffffffffffffffffffffffffffffffffffff8516610c87576040517f01a835140000000000000000000000000000000000000000000000000000000081526000600482015260240161068f565b60408051600180825260208201869052818301908152606082018590526080820190925290610cb98787848487610cc2565b50505050505050565b610cce85858585610d22565b73ffffffffffffffffffffffffffffffffffffffff841615610af85782513390600103610d145760208481015190840151610d0d838989858589611004565b50506106a5565b6106a58187878787876111f6565b8051825114610d6a57815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161068f565b3360005b8351811015610ed75760208181028581018201519085019091015173ffffffffffffffffffffffffffffffffffffffff881615610e6e5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8c16845290915290205481811015610e3a576040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16600482015260248101829052604481018390526064810184905260840161068f565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290209082900390555b73ffffffffffffffffffffffffffffffffffffffff871615610ecd5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915281208054839290610ec79084906119d7565b90915550505b5050600101610d6e565b508251600103610f7f57602083015160009060208401519091508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051610f70929190918252602082015260400190565b60405180910390a45050610af8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610ff5929190611a4d565b60405180910390a45050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b156106a5576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e619061107b9089908990889088908890600401611a7b565b6020604051808303816000875af19250505080156110d4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526110d191810190611acb565b60015b611163573d808015611102576040519150601f19603f3d011682016040523d82523d6000602084013e611107565b606091505b50805160000361115b576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015260240161068f565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610cb9576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015260240161068f565b73ffffffffffffffffffffffffffffffffffffffff84163b156106a5576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c819061126d9089908990889088908890600401611ae8565b6020604051808303816000875af19250505080156112c6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526112c391810190611acb565b60015b6112f4573d808015611102576040519150601f19603f3d011682016040523d82523d6000602084013e611107565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610cb9576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8616600482015260240161068f565b803573ffffffffffffffffffffffffffffffffffffffff811681146113ab57600080fd5b919050565b600080604083850312156113c357600080fd5b6113cc83611387565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461140857600080fd5b50565b60006020828403121561141d57600080fd5b8135611428816113da565b9392505050565b6000815180845260005b8181101561145557602081850181015186830182015201611439565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611428602083018461142f565b6000602082840312156114b857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611535576115356114bf565b604052919050565b600067ffffffffffffffff821115611557576115576114bf565b5060051b60200190565b600082601f83011261157257600080fd5b813560206115876115828361153d565b6114ee565b8083825260208201915060208460051b8701019350868411156115a957600080fd5b602086015b848110156115c557803583529183019183016115ae565b509695505050505050565b600082601f8301126115e157600080fd5b813567ffffffffffffffff8111156115fb576115fb6114bf565b61162c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016114ee565b81815284602083860101111561164157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561167657600080fd5b61167f86611387565b945061168d60208701611387565b9350604086013567ffffffffffffffff808211156116aa57600080fd5b6116b689838a01611561565b945060608801359150808211156116cc57600080fd5b6116d889838a01611561565b935060808801359150808211156116ee57600080fd5b506116fb888289016115d0565b9150509295509295909350565b600082601f83011261171957600080fd5b813560206117296115828361153d565b8083825260208201915060208460051b87010193508684111561174b57600080fd5b602086015b848110156115c55761176181611387565b8352918301918301611750565b6000806040838503121561178157600080fd5b823567ffffffffffffffff8082111561179957600080fd5b6117a586838701611708565b935060208501359150808211156117bb57600080fd5b506117c885828601611561565b9150509250929050565b60008151808452602080850194506020840160005b83811015611803578151875295820195908201906001016117e7565b509495945050505050565b60208152600061142860208301846117d2565b6000806040838503121561183457600080fd5b61183d83611387565b91506020830135801515811461185257600080fd5b809150509250929050565b6000806040838503121561187057600080fd5b61187983611387565b915061188760208401611387565b90509250929050565b6000602082840312156118a257600080fd5b813567ffffffffffffffff8111156118b957600080fd5b6118c584828501611708565b949350505050565b600080600080600060a086880312156118e557600080fd5b6118ee86611387565b94506118fc60208701611387565b93506040860135925060608601359150608086013567ffffffffffffffff81111561192657600080fd5b6116fb888289016115d0565b6000806040838503121561194557600080fd5b8235915061188760208401611387565b600181811c9082168061196957607f821691505b6020821081036119a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561031d5761031d6119a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff808316818103611a3057611a306119a8565b6001019392505050565b8181038181111561031d5761031d6119a8565b604081526000611a6060408301856117d2565b8281036020840152611a7281856117d2565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152611ac060a083018461142f565b979650505050505050565b600060208284031215611add57600080fd5b8151611428816113da565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152611b2160a08301866117d2565b8281036060840152611b3381866117d2565b90508281036080840152611b47818561142f565b9897505050505050505056fea26469706673582212206b7ecbce425ab0b84043099f288eb1b85f18595db750d6b10d9d24da0a85109064736f6c63430008180033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000856c4efb76c1d1ae02e20ceb03a2a6a08b0b8dc30000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000923206f6574682e696f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018636c61696d2072657761726473206f6e206f6574682e696f0000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f636c6f7564666c6172652d697066732e636f6d2f697066732f516d59747848753769447a5a36726331596859596e55787753654c77554533545163595579624636714c384b715a2f7b69647d2e6a736f6e00000000000000