60c060405234801562000010575f80fd5b50338062000031576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060408051808201909152600481526315995a5b60e21b6020820152600190620000a39082620001c6565b506040805180820190915260048152631591525360e21b6020820152600290620000ce9082620001c6565b506012608081905261012c600455620000e990600a6200039d565b620000f79061012c620003b4565b60a0819052335f908152600f60209081526040808320805460ff191660011790556008909152902055620003ce565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200014f57607f821691505b6020821081036200016e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001c1575f81815260208120601f850160051c810160208610156200019c5750805b601f850160051c820191505b81811015620001bd57828155600101620001a8565b5050505b505050565b81516001600160401b03811115620001e257620001e262000126565b620001fa81620001f384546200013a565b8462000174565b602080601f83116001811462000230575f8415620002185750858301515b5f19600386901b1c1916600185901b178555620001bd565b5f85815260208120601f198616915b8281101562000260578886015182559484019460019091019084016200023f565b50858210156200027e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620002e257815f1904821115620002c657620002c66200028e565b80851615620002d457918102915b93841c9390800290620002a7565b509250929050565b5f82620002fa5750600162000397565b816200030857505f62000397565b81600181146200032157600281146200032c576200034c565b600191505062000397565b60ff8411156200034057620003406200028e565b50506001821b62000397565b5060208310610133831016604e8410600b841016171562000371575081810a62000397565b6200037d8383620002a2565b805f19048211156200039357620003936200028e565b0290505b92915050565b5f620003ad60ff841683620002ea565b9392505050565b80820281158282048414176200039757620003976200028e565b60805160a051611ba6620003f75f395f61026701525f81816102c70152610ec80152611ba65ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80636352211e116100fe578063a9e2880e1161009e578063dd62ed3e1161006e578063dd62ed3e1461040b578063e0df5b6f14610435578063e985e9c514610448578063f2fde38b14610475575f80fd5b8063a9e2880e146103c8578063b88d4fde146103dd578063ca4c0e09146103f0578063d547cfb714610403575f80fd5b806395d89b41116100d957806395d89b41146103785780639b19251a14610380578063a22cb465146103a2578063a9059cbb146103b5575f80fd5b80636352211e1461033457806370a08231146103475780638da5cb5b14610366575f80fd5b80632b9689581161016957806342842e0e1161014457806342842e0e146102fb578063504334c21461030e57806353d6fd59146103215780635f78a8d514610289575f80fd5b80632b968958146102b15780632c88797e146102b9578063313ce567146102c2575f80fd5b8063095ea7b3116101a4578063095ea7b31461023f57806318160ddd146102625780631e9ee4011461028957806323b872dd1461029e575f80fd5b806306fdde03146101ca57806307c56001146101e8578063081812fc146101ff575b5f80fd5b6101d2610488565b6040516101df91906114be565b60405180910390f35b6101f160065481565b6040519081526020016101df565b61022761020d366004611509565b600a6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101df565b61025261024d366004611536565b610514565b60405190151581526020016101df565b6101f17f000000000000000000000000000000000000000000000000000000000000000081565b61029c610297366004611509565b61065f565b005b61029c6102ac36600461155e565b6106a2565b61029c610a1e565b6101f160045481565b6102e97f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101df565b61029c61030936600461155e565b610a82565b61029c61031c366004611634565b610b53565b61029c61032f366004611694565b610b95565b610227610342366004611509565b610be8565b6101f16103553660046116cd565b60086020525f908152604090205481565b5f54610227906001600160a01b031681565b6101d2610c22565b61025261038e3660046116cd565b600f6020525f908152604090205460ff1681565b61029c6103b0366004611694565b610c2f565b6102526103c3366004611536565b610c9a565b6103d0610cad565b6040516101df91906116e6565b61029c6103eb366004611729565b610d03565b6101f16103fe366004611509565b610dc3565b6101d2610de2565b6101f16104193660046117bc565b600960209081525f928352604080842090915290825290205481565b61029c6104433660046117ed565b610def565b6102526104563660046117bc565b600b60209081525f928352604080842090915290825290205460ff1681565b61029c6104833660046116cd565b610e28565b6001805461049590611827565b80601f01602080910402602001604051908101604052809291908181526020018280546104c190611827565b801561050c5780601f106104e35761010080835404028352916020019161050c565b820191905f5260205f20905b8154815290600101906020018083116104ef57829003601f168201915b505050505081565b5f600654821115801561052657505f82115b156105fa575f828152600c60205260409020546001600160a01b031633811480159061057557506001600160a01b0381165f908152600b6020908152604080832033845290915290205460ff16155b15610592576040516282b42960e81b815260040160405180910390fd5b5f838152600a602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610655565b335f8181526009602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b5f546001600160a01b03163314610688576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b0316815260086020526040902055565b60045481116109b2575f818152600c60205260409020546001600160a01b038481169116146106e457604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b03821661070b57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061074757506001600160a01b0383165f908152600b6020908152604080832033845290915290205460ff16155b801561076957505f818152600a60205260409020546001600160a01b03163314155b15610786576040516282b42960e81b815260040160405180910390fd5b61078e610ec2565b6001600160a01b0384165f90815260086020526040812080549091906107b5908490611873565b909155506107c39050610ec2565b6001600160a01b038084165f8181526008602090815260408083208054909601909555858252600c815284822080546001600160a01b03199081169094179055600a815284822080549093169092559186168252600d9052908120805461082c90600190611873565b8154811061083c5761083c611886565b5f9182526020808320909101546001600160a01b0387168352600d82526040808420868552600e9093529092205481549293508392811061087f5761087f611886565b5f9182526020808320909101929092556001600160a01b0386168152600d909152604090208054806108b3576108b361189a565b5f828152602080822083015f19908101839055909201909255838252600e8152604080832054848452818420556001600160a01b038616808452600d835290832080546001818101835582865293852001869055925290546109159190611873565b5f838152600e602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761099b610ec2565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526009602090815260408083203384529091529020545f198114610a0b576109e78282611873565b6001600160a01b0385165f9081526009602090815260408083203384529091529020555b610a16848484610ef3565b50505b505050565b5f546001600160a01b03163314610a47576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610a8d8383836106a2565b6001600160a01b0382163b15801590610b355750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610b04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2891906118ae565b6001600160e01b03191614155b15610a1957604051633da6393160e01b815260040160405180910390fd5b5f546001600160a01b03163314610b7c576040516282b42960e81b815260040160405180910390fd5b6001610b888382611922565b506002610a198282611922565b5f546001600160a01b03163314610bbe576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b5f818152600c60205260409020546001600160a01b031680610c1d576040516309550c7760e01b815260040160405180910390fd5b919050565b6002805461049590611827565b335f818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610ca6338484610ef3565b9392505050565b60606005805480602002602001604051908101604052809291908181526020018280548015610cf957602002820191905f5260205f20905b815481526020019060010190808311610ce5575b5050505050905090565b610d0e8585856106a2565b6001600160a01b0384163b15801590610da55750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d589033908a908990899089906004016119de565b6020604051808303815f875af1158015610d74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9891906118ae565b6001600160e01b03191614155b15610a1657604051633da6393160e01b815260040160405180910390fd5b60058181548110610dd2575f80fd5b5f91825260209091200154905081565b6003805461049590611827565b5f546001600160a01b03163314610e18576040516282b42960e81b815260040160405180910390fd5b6003610e248282611922565b5050565b5f546001600160a01b03163314610e51576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610e78576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f610eee7f0000000000000000000000000000000000000000000000000000000000000000600a611b10565b905090565b5f80610efd610ec2565b6001600160a01b038087165f818152600860205260408082208054948a1683529082205492825293945091929091869190610f388386611873565b90915550506001600160a01b038087165f90815260086020908152604080832080548a019055928a168252600f9052205460ff16610fdd576001600160a01b0387165f90815260086020526040812054610f93908590611b32565b610f9d8585611b32565b610fa79190611873565b90505f5b610fb8620f424083611b32565b811015610fda57610fc8896110c4565b80610fd281611b45565b915050610fab565b50505b6001600160a01b0386165f908152600f602052604090205460ff1661106a575f6110078483611b32565b6001600160a01b0388165f9081526008602052604090205461102a908690611b32565b6110349190611873565b90505f5b611045620f424083611b32565b81101561106757611055886111e2565b8061105f81611b45565b915050611038565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516110af91815260200190565b60405180910390a35060019695505050505050565b6001600160a01b0381166110eb57604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600d60205260408120805461111090600190611873565b8154811061112057611120611886565b905f5260205f20015490506111348161131d565b6001600160a01b0382165f908152600d6020526040902080548061115a5761115a61189a565b5f828152602080822083015f19908101839055909201909255828252600e81526040808320839055600c825280832080546001600160a01b0319908116909155600a9092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b03811661120957604051634e46966960e11b815260040160405180910390fd5b5f600454600654101561124c5760068054905f61122583611b45565b90915550506006545f818152600760205260409020805460ff19166001179055905061127c565b600554156112635761125c611392565b905061127c565b60405163ed4421ad60e01b815260040160405180910390fd5b5f818152600c6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600d835290832080546001818101835582865293852001859055925290546112d39190611873565b5f828152600e602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f8181526007602052604090205460ff1661134b576040516335c0139560e21b815260040160405180910390fd5b60058054600181019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018190555f908152600760205260409020805460ff19169055565b6005545f9081036113b65760405163ed4421ad60e01b815260040160405180910390fd5b600554604080514260208201526bffffffffffffffffffffffff193360601b1691810191909152605481018290525f9190607401604051602081830303815290604052805190602001205f1c61140c9190611b5d565b90505f6005828154811061142257611422611886565b905f5260205f2001549050600560016005805490506114419190611873565b8154811061145157611451611886565b905f5260205f2001546005838154811061146d5761146d611886565b5f9182526020909120015560058054806114895761148961189a565b5f828152602080822083015f199081018390559092019092558282526007905260409020805460ff1916600117905592915050565b5f6020808352835180828501525f5b818110156114e9578581018301518582016040015282016114cd565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215611519575f80fd5b5035919050565b80356001600160a01b0381168114610c1d575f80fd5b5f8060408385031215611547575f80fd5b61155083611520565b946020939093013593505050565b5f805f60608486031215611570575f80fd5b61157984611520565b925061158760208501611520565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126115ba575f80fd5b813567ffffffffffffffff808211156115d5576115d5611597565b604051601f8301601f19908116603f011681019082821181831017156115fd576115fd611597565b81604052838152866020858801011115611615575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611645575f80fd5b823567ffffffffffffffff8082111561165c575f80fd5b611668868387016115ab565b9350602085013591508082111561167d575f80fd5b5061168a858286016115ab565b9150509250929050565b5f80604083850312156116a5575f80fd5b6116ae83611520565b9150602083013580151581146116c2575f80fd5b809150509250929050565b5f602082840312156116dd575f80fd5b610ca682611520565b602080825282518282018190525f9190848201906040850190845b8181101561171d57835183529284019291840191600101611701565b50909695505050505050565b5f805f805f6080868803121561173d575f80fd5b61174686611520565b945061175460208701611520565b935060408601359250606086013567ffffffffffffffff80821115611777575f80fd5b818801915088601f83011261178a575f80fd5b813581811115611798575f80fd5b8960208285010111156117a9575f80fd5b9699959850939650602001949392505050565b5f80604083850312156117cd575f80fd5b6117d683611520565b91506117e460208401611520565b90509250929050565b5f602082840312156117fd575f80fd5b813567ffffffffffffffff811115611813575f80fd5b61181f848285016115ab565b949350505050565b600181811c9082168061183b57607f821691505b60208210810361185957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106595761065961185f565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156118be575f80fd5b81516001600160e01b031981168114610ca6575f80fd5b601f821115610a19575f81815260208120601f850160051c810160208610156118fb5750805b601f850160051c820191505b8181101561191a57828155600101611907565b505050505050565b815167ffffffffffffffff81111561193c5761193c611597565b6119508161194a8454611827565b846118d5565b602080601f831160018114611983575f841561196c5750858301515b5f19600386901b1c1916600185901b17855561191a565b5f85815260208120601f198616915b828110156119b157888601518255948401946001909101908401611992565b50858210156119ce57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b600181815b80851115611a6a57815f1904821115611a5057611a5061185f565b80851615611a5d57918102915b93841c9390800290611a35565b509250929050565b5f82611a8057506001610659565b81611a8c57505f610659565b8160018114611aa25760028114611aac57611ac8565b6001915050610659565b60ff841115611abd57611abd61185f565b50506001821b610659565b5060208310610133831016604e8410600b8410161715611aeb575081810a610659565b611af58383611a30565b805f1904821115611b0857611b0861185f565b029392505050565b5f610ca660ff841683611a72565b634e487b7160e01b5f52601260045260245ffd5b5f82611b4057611b40611b1e565b500490565b5f60018201611b5657611b5661185f565b5060010190565b5f82611b6b57611b6b611b1e565b50069056fea2646970667358221220c4c2bcb66461b1d930a397c705838a0c6e4f44bf866f89f2ece33847afbe24d364736f6c63430008140033