0x61010060405234801562000011575f80fd5b5060405162002a0a38038062002a0a833981016040819052620000349162000145565b5f608081905260a08390528282620000736200005982670de0b6b3a76400006200017c565b6200006d90670de0b6b3a764000062000198565b6200009d565b60c0526200008e6200005982670de0b6b3a7640000620001b2565b60e05250620001c89350505050565b60b581600160881b8110620000b75760409190911b9060801c5b69010000000000000000008110620000d45760209190911b9060401c5b650100000000008110620000ed5760109190911b9060201c5b63010000008110620001045760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b5f806040838503121562000157575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8181038181111562000192576200019262000168565b92915050565b808202811582820484141762000192576200019262000168565b8082018082111562000192576200019262000168565b60805160a05160c05160e0516127f2620002185f395f818161020f0152610d8001525f81816101210152610d4801525f81816101a00152818161057501526105bf01525f61015601526127f25ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c8063951ccdbf1161006e578063951ccdbf146101c2578063a129568d146101d5578063b0cccd7a146101f5578063e8832c751461020a578063eb29dc5e14610231578063fa461e3314610251575f80fd5b8063150b7a02146100b55780632949940a146100f25780632ed867c91461011c57806335a4bece146101515780634726dbb61461017857806354b4bedc1461019b575b5f80fd5b6100d46100c336600461198d565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020015b60405180910390f35b610105610100366004611b53565b610264565b6040805192151583526020830191909152016100e9565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100e9565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b61018b610186366004611b53565b610385565b60405190151581526020016100e9565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b61018b6101d0366004611bc6565b61038d565b6101e86101e3366004611be1565b6103b0565b6040516100e99190611cf7565b610208610203366004611d09565b610993565b005b6101437f000000000000000000000000000000000000000000000000000000000000000081565b61024461023f366004611d33565b610b3b565b6040516100e99190611d4a565b61020861025f366004611dfb565b610dbd565b5f808360c00151846080015110610293576001915061028c84608001516001855f0151610e4c565b905061037e565b8360a001518460800151116102b8575f915061028c84608001515f8560200151610e4c565b5f6102d085608001518660a001518760c00151610ea0565b90505f6102e686608001516001875f0151610e4c565b90505f8186602001516102f99190611e5e565b60208701519091505f9061031690670de0b6b3a764000084610f04565b905083811015610349576001955061034282670de0b6b3a764000061033b8488611e71565b9190610f04565b9450610379565b5f95508561036483670de0b6b3a764000061033b8886611e71565b905061037589608001515f83610e4c565b9550505b505050505b9250929050565b5f5b92915050565b5f8160e00151826080015110806103875750506101008101516080909101511190565b6103db6040518060800160405280606081526020016060815260200160608152602001606081525090565b5f546001600160a01b031633146104055760405163f3f6425d60e01b815260040160405180910390fd5b5f61041283850185611f78565b80925081935050505f82602001515f815181106104315761043161205b565b602002602001015190505f61044582610b3b565b90506104508161038d565b1561046e57604051633a8bf65960e01b815260040160405180910390fd5b604080518082019091525f80825260208201526040805160808101825284815230602082019081526001600160801b0382840181815260608401828152945163fc6f786560e01b81529351600485015291516001600160a01b031660248401529051811660448301529151909116606482015273b7996d1ecd07fb227e8dca8cd5214bdfb04534e59063fc6f78659060840160408051808303815f875af115801561051b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053f919061206f565b602083015281526105508282610385565b1561056d57604051625713a160e91b815260040160405180910390fd5b80516105a2907f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610f04565b815182906105b1908390611e71565b90525060208101516105ec907f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610f04565b816020018181516105fd9190611e71565b9052505f8061060c8484610264565b9150915061061b848383610f1f565b1561063957604051633a8bf65960e01b815260040160405180910390fd5b81156106595780836020018181516106519190611e5e565b90525061066e565b80835f0181815161066a9190611e5e565b9052505b602084015161069b906001600160a01b031673b7996d1ecd07fb227e8dca8cd5214bdfb04534e55f61104f565b825160208501516106cd916001600160a01b039091169073b7996d1ecd07fb227e8dca8cd5214bdfb04534e59061104f565b60408401516106fa906001600160a01b031673b7996d1ecd07fb227e8dca8cd5214bdfb04534e55f61104f565b61073473b7996d1ecd07fb227e8dca8cd5214bdfb04534e5846020015186604001516001600160a01b031661104f9092919063ffffffff16565b6040805160c081018252868152845160208083019182528601518284019081525f60608401818152608085019182524260a08601908152955163219f5d1760e01b815294516004860152925160248501529051604484015290516064830152516084820152905160a482015273b7996d1ecd07fb227e8dca8cd5214bdfb04534e59063219f5d179060c4016060604051808303815f875af11580156107db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ff91906120a7565b50505060208401516040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa15801561084a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086e91906120d9565b60408087015190516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156108bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108df91906120d9565b90508115610900576020860151610900906001600160a01b031689846110d6565b801561091f57604086015161091f906001600160a01b031689836110d6565b60405163095ea7b360e01b81523360048201526024810188905273b7996d1ecd07fb227e8dca8cd5214bdfb04534e59063095ea7b3906044015f604051808303815f87803b15801561096f575f80fd5b505af1158015610981573d5f803e3d5ffd5b50505050505050505050505092915050565b5f546001600160a01b0316156109bc5760405163b5dfd9e560e01b815260040160405180910390fd5b604051630972932760e21b81526001600160a01b038316600482015273da14fdd72345c4d2511357214c5b89a919768e59906325ca4c9c90602401602060405180830381865afa158015610a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3691906120ff565b610a5357604051630ea8370b60e41b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038416178155610a8c3373b7996d1ecd07fb227e8dca8cd5214bdfb04534e584611153565b60405162b9252f60e41b81529091506001600160a01b03841690630b9252f090610abc903090859060040161215b565b5f604051808303815f87803b158015610ad3575f80fd5b505af1158015610ae5573d5f803e3d5ffd5b50505f80546001600160a01b031916905550506040518281526001600160a01b038416907f169f1815ebdea059aac3bb00ec9a9594c7a5ffcb64a17e8392b5d84909a145569060200160405180910390a2505050565b610bad6040518061016001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f62ffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b60405163133f757160e31b8152600481018390525f90819073b7996d1ecd07fb227e8dca8cd5214bdfb04534e5906399fbab889060240161018060405180830381865afa158015610c00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2491906121a5565b50505062ffffff90941660608c0152506001600160a01b0393841660408b0152929093166020890152509094509250610c60915083905061133c565b6001600160a01b031660a0840152610c778161133c565b6001600160a01b031660c0840152602083015160408401516060850151610c9f92919061166a565b6001600160a01b031680845260408051633850c7bd60e01b81529051633850c7bd9160048082019260e0929091908290030181865afa158015610ce4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d08919061228f565b5050506001600160a01b039093166080870152505083515f9150610d2b9061168b565b90505f610d378261133c565b6001600160a01b03169050610d75817f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610f04565b60e0860152610dad817f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610f04565b6101008601525092949350505050565b5f8080610dcc84860186612319565b9194509250905033610ddf84848461166a565b6001600160a01b031614610e0657604051634b60273560e01b815260040160405180910390fd5b5f871315610e2757610e226001600160a01b03841633896110d6565b610e43565b5f861315610e4357610e436001600160a01b03831633886110d6565b50505050505050565b5f82610e7a57610e7582610e656002600160601b612441565b610e70600288612441565b61179b565b610e98565b610e9882610e89600287612441565b610e706002600160601b612441565b949350505050565b5f80610eac8486611e71565b90505f83610ebb600288612441565b610ec59190612463565b85610ed1886002612476565b610edb9190611e71565b610ee59190611e71565b9050610efa82670de0b6b3a764000083610f04565b9695505050505050565b5f825f190484118302158202610f18575f80fd5b5091020490565b5f815f03610f2e57505f611048565b5f83610f3f57846101000151610f45565b8460e001515b90505f856020015186604001518760600151604051602001610f8d939291906001600160a01b03938416815291909216602082015262ffffff91909116604082015260600190565b60405160208183030381529060405290505f80875f01516001600160a01b031663128acb08308989610fbe9061248d565b88886040518663ffffffff1660e01b8152600401610fe09594939291906124a7565b60408051808303815f875af1158015610ffb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101f919061206f565b9150915086611036576110318261248d565b61103f565b61103f8161248d565b86119450505050505b9392505050565b5f60405163095ea7b360e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806110d05760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b60448201526064015b60405180910390fd5b50505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806110d05760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016110c7565b6040805160018082528183019092526060915f91906020808301908036833701905050905083815f8151811061118b5761118b61205b565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905083815f815181106111da576111da61205b565b60209081029190910101526040805160018082528183019092525f918160200160208202803683370190505090506001815f8151811061121c5761121c61205b565b60209081029190910101526040805160018082528183019092525f918160200160208202803683370190505090506002815f8151811061125e5761125e61205b565b6020026020010181815250505f604051806080016040528086815260200185815260200184815260200183815250905060606112bb6040518060800160405280606081526020016060815260200160608152602001606081525090565b6112dd6040518060600160405280606081526020015f81526020015f81525090565b5f848d6040516020016112f19291906124ec565b6040516020818303038152906040529050848383868460405160200161131b959493929190612515565b60405160208183030381529060405299505050505050505050509392505050565b5f805f8360020b12611351578260020b611358565b8260020b5f035b9050620d89e88111156113915760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016110c7565b5f816001165f036113a657600160801b6113b8565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156113ec576ffff97272373d413259a46990580e213a0260801c5b600482161561140b576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561142a576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611449576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611468576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611487576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156114a6576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156114c6576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156114e6576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611506576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611526576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611546576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611566576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611586576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156115a6576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156115c7576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156115e7576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611606576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611623576b048a170391f7dc42444e8fa20260801c5b5f8460020b131561164257805f198161163e5761163e61244f565b0490505b640100000000810615611656576001611658565b5f5b60ff16602082901c0192505050919050565b5f610e98730fd83557b2be93617c9c1c1b6fd549401c74558c858585611841565b6040805160028082526060820183525f928392919060208301908036833701905050905061012c816001815181106116c5576116c561205b565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81525f906001600160a01b0385169063883bdbfd906117089085906004016125e1565b5f60405180830381865afa158015611722573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611749919081019061268f565b50905061012c60030b816001815181106117655761176561205b565b6020026020010151825f8151811061177f5761177f61205b565b60200260200101516117919190612753565b610e989190612780565b5f80805f19858709858702925082811083820303915050805f036117cf575f84116117c4575f80fd5b508290049050611048565b8084116117da575f80fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f826001600160a01b0316846001600160a01b03161061185f575f80fd5b604080516001600160a01b03808716602083015285169181019190915262ffffff83166060820152859060800160408051601f19818403018152908290528051602091820120611907939290917fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5491016001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f19818403018152919052805160209091012095945050505050565b6001600160a01b038116811461193c575f80fd5b50565b803561194a81611928565b919050565b5f8083601f84011261195f575f80fd5b50813567ffffffffffffffff811115611976575f80fd5b60208301915083602082850101111561037e575f80fd5b5f805f805f608086880312156119a1575f80fd5b85356119ac81611928565b945060208601356119bc81611928565b935060408601359250606086013567ffffffffffffffff8111156119de575f80fd5b6119ea8882890161194f565b969995985093965092949392505050565b634e487b7160e01b5f52604160045260245ffd5b604051610160810167ffffffffffffffff81118282101715611a3357611a336119fb565b60405290565b6040516080810167ffffffffffffffff81118282101715611a3357611a336119fb565b604051601f8201601f1916810167ffffffffffffffff81118282101715611a8557611a856119fb565b604052919050565b62ffffff8116811461193c575f80fd5b803561194a81611a8d565b5f6101608284031215611ab9575f80fd5b611ac1611a0f565b9050611acc8261193f565b8152611ada6020830161193f565b6020820152611aeb6040830161193f565b6040820152611afc60608301611a9d565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e082015261010080830135818301525061012080830135818301525061014080830135818301525092915050565b5f808284036101a0811215611b66575f80fd5b611b708585611aa8565b9250604061015f1982011215611b84575f80fd5b506040516040810181811067ffffffffffffffff82111715611ba857611ba86119fb565b60405261016084013581526101809093013560208401525092909150565b5f6101608284031215611bd7575f80fd5b6110488383611aa8565b5f8060208385031215611bf2575f80fd5b823567ffffffffffffffff811115611c08575f80fd5b611c148582860161194f565b90969095509350505050565b5f815180845260208085019450602084015f5b83811015611c4f57815187529582019590820190600101611c33565b509495945050505050565b8051608080845281519084018190525f916020919082019060a0860190845b81811015611c9e5783516001600160a01b031683529284019291840191600101611c79565b5050602085015192508581036020870152611cb98184611c20565b9250505060408301518482036040860152611cd48282611c20565b91505060608301518482036060860152611cee8282611c20565b95945050505050565b602081525f6110486020830184611c5a565b5f8060408385031215611d1a575f80fd5b8235611d2581611928565b946020939093013593505050565b5f60208284031215611d43575f80fd5b5035919050565b81516001600160a01b0316815261016081016020830151611d7660208401826001600160a01b03169052565b506040830151611d9160408401826001600160a01b03169052565b506060830151611da8606084018262ffffff169052565b506080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525061014080840151818401525092915050565b5f805f8060608587031215611e0e575f80fd5b8435935060208501359250604085013567ffffffffffffffff811115611e32575f80fd5b611e3e8782880161194f565b95989497509550505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038757610387611e4a565b8181038181111561038757610387611e4a565b5f67ffffffffffffffff821115611e9d57611e9d6119fb565b5060051b60200190565b5f82601f830112611eb6575f80fd5b81356020611ecb611ec683611e84565b611a5c565b8083825260208201915060208460051b870101935086841115611eec575f80fd5b602086015b84811015611f11578035611f0481611928565b8352918301918301611ef1565b509695505050505050565b5f82601f830112611f2b575f80fd5b81356020611f3b611ec683611e84565b8083825260208201915060208460051b870101935086841115611f5c575f80fd5b602086015b84811015611f115780358352918301918301611f61565b5f8060408385031215611f89575f80fd5b823567ffffffffffffffff80821115611fa0575f80fd5b9084019060808287031215611fb3575f80fd5b611fbb611a39565b823582811115611fc9575f80fd5b611fd588828601611ea7565b825250602083013582811115611fe9575f80fd5b611ff588828601611f1c565b60208301525060408301358281111561200c575f80fd5b61201888828601611f1c565b60408301525060608301358281111561202f575f80fd5b61203b88828601611f1c565b60608301525093506120529150506020840161193f565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f8060408385031215612080575f80fd5b505080516020909101519092909150565b80516001600160801b038116811461194a575f80fd5b5f805f606084860312156120b9575f80fd5b6120c284612091565b925060208401519150604084015190509250925092565b5f602082840312156120e9575f80fd5b5051919050565b8051801515811461194a575f80fd5b5f6020828403121561210f575f80fd5b611048826120f0565b5f81518084525f5b8181101561213c57602081850181015186830182015201612120565b505f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190525f90610e9890830184612118565b805161194a81611928565b805161194a81611a8d565b8051600281900b811461194a575f80fd5b5f805f805f805f805f805f806101808d8f0312156121c1575f80fd5b8c516bffffffffffffffffffffffff811681146121dc575f80fd5b9b506121ea60208e0161217e565b9a506121f860408e0161217e565b995061220660608e0161217e565b985061221460808e01612189565b975061222260a08e01612194565b965061223060c08e01612194565b955061223e60e08e01612091565b94506101008d015193506101208d0151925061225d6101408e01612091565b915061226c6101608e01612091565b90509295989b509295989b509295989b565b805161ffff8116811461194a575f80fd5b5f805f805f805f60e0888a0312156122a5575f80fd5b87516122b081611928565b96506122be60208901612194565b95506122cc6040890161227e565b94506122da6060890161227e565b93506122e86080890161227e565b925060a088015160ff811681146122fd575f80fd5b915061230b60c089016120f0565b905092959891949750929550565b5f805f6060848603121561232b575f80fd5b833561233681611928565b9250602084013561234681611928565b9150604084013561235681611a8d565b809150509250925092565b600181815b8085111561239b57815f190482111561238157612381611e4a565b8085161561238e57918102915b93841c9390800290612366565b509250929050565b5f826123b157506001610387565b816123bd57505f610387565b81600181146123d357600281146123dd576123f9565b6001915050610387565b60ff8411156123ee576123ee611e4a565b50506001821b610387565b5060208310610133831016604e8410600b841016171561241c575081810a610387565b6124268383612361565b805f190482111561243957612439611e4a565b029392505050565b5f61104860ff8416836123a3565b634e487b7160e01b5f52601260045260245ffd5b5f826124715761247161244f565b500490565b808202811582820484141761038757610387611e4a565b5f600160ff1b82016124a1576124a1611e4a565b505f0390565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f906124e190830184612118565b979650505050505050565b604081525f6124fe6040830185611c5a565b905060018060a01b03831660208301529392505050565b60a081525f61252760a0830188611c5a565b60208382038185015261253a8289611c5a565b9150604084830360408601526060830188516060855281815180845260808701915085830193505f92505b8083101561259757835180516001600160a01b0316835286015186830152928501926001929092019190840190612565565b50848b01518587015260408b0151604087015287810360608901526125bc818b612118565b9550505050505082810360808401526125d58185612118565b98975050505050505050565b602080825282518282018190525f9190848201906040850190845b8181101561261e57835163ffffffff16835292840192918401916001016125fc565b50909695505050505050565b5f82601f830112612639575f80fd5b81516020612649611ec683611e84565b8083825260208201915060208460051b87010193508684111561266a575f80fd5b602086015b84811015611f1157805161268281611928565b835291830191830161266f565b5f80604083850312156126a0575f80fd5b825167ffffffffffffffff808211156126b7575f80fd5b818501915085601f8301126126ca575f80fd5b815160206126da611ec683611e84565b82815260059290921b840181019181810190898411156126f8575f80fd5b948201945b838610156127245785518060060b8114612715575f80fd5b825294820194908201906126fd565b9188015191965090935050508082111561273c575f80fd5b506127498582860161262a565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff8213171561038757610387611e4a565b5f8160060b8360060b806127965761279661244f565b667fffffffffffff1982145f19821416156127b3576127b3611e4a565b9005939250505056fea2646970667358221220b85d856c21bbe51e0ac64dc5d034790ccba42cc3c1c3511d2a529cdd4413971864736f6c63430008160033000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000011c37937e08000