0x60e06040523480156200001157600080fd5b5060405162002a1738038062002a1783398101604081905262000034916200008c565b6001600160a01b0390811660805291821660a0521660c052620000e4565b60006001600160a01b0382165b92915050565b620000708162000052565b81146200007c57600080fd5b50565b80516200005f8162000065565b600080600060608486031215620000a657620000a6600080fd5b6000620000b486866200007f565b9350506020620000c7868287016200007f565b9250506040620000da868287016200007f565b9150509250925092565b60805160a05160c0516128e2620001356000396000818161015b015261026601526000818160e5015281816105ba015281816106af015261074a01526000818160b3015261020101526128e26000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806345cd3cea1161005b57806345cd3cea146101275780636e3b7a79146101355780637d98ebac1461014357806384796caf1461015657600080fd5b80630d94ea2a1461008d57806315c14a4a146100b157806317f5e788146100e05780633a8fdd7d14610107575b600080fd5b61009b6346c67b6d60e01b81565b6040516100a89190610ef6565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b6040516100a89190610f3a565b6100d37f000000000000000000000000000000000000000000000000000000000000000081565b61011a610115366004610fcc565b61018a565b6040516100a89190611055565b61009b63a94e78ef60e01b81565b61009b6354e3f31b60e01b81565b61011a610151366004611063565b6101f1565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516100a89190611116565b60006101b2792830b930b9bbb0b820b3b3b932b3b0ba37b92a3930b232b92b1960311b6103b7565b6040516020016101c29190611172565b60408051601f198184030181529082905262461bcd60e51b82526101e8916004016111e8565b60405180910390fd5b6000336102606001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682147127b7363ca237b637b6b4ba32a6b0b933b4b760711b7f4f6e6c7920446f6c6f6d6974652063616e2063616c6c2066756e6374696f6e0084610452565b61028b867f00000000000000000000000000000000000000000000000000000000000000008761049e565b60008061029a858701876112ea565b91509150600080828060200190518101906102b591906113b4565b915091506102c4898383610553565b6040516370a0823160e01b81526000906001600160a01b038d16906370a08231906102f3903090600401611116565b60206040518083038186803b15801561030b57600080fd5b505afa15801561031f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610343919061140c565b905061039285821015792830b930b9bbb0b820b3b3b932b3b0ba37b92a3930b232b92b1960311b7f496e73756666696369656e74206f757470757420616d6f756e7400000000000084896107bf565b6103a66001600160a01b038d168e83610816565b9d9c50505050505050505050505050565b60606000826040516020016103cc919061142d565b60408051601f19818403018152919052905060205b801561043757806103f181611458565b9150508181815181106104065761040661146f565b01602001516001600160f81b03191615610432576000610427826001611485565b835250909392505050565b6103e1565b5060408051600080825260208201909252905b509392505050565b8361049857610460836103b7565b6101d160f51b61046f846103b7565b61080f60f21b61047e85610910565b6040516101c2959493929190601f60f91b906020016114bd565b50505050565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e906104cf903090879060040161151b565b60206040518083038186803b1580156104e757600080fd5b505afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f919061140c565b111561053a5761053a6001600160a01b038416836000610816565b61054e6001600160a01b0384168383610816565b505050565b6001600160e01b031982166346c67b6d60e01b1415610648576000818060200190518101906105829190611b0f565b90506105978160200151858360600151610a56565b6060820152602081018490526040516346c67b6d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906346c67b6d906105ef908490600401611f0e565b602060405180830381600087803b15801561060957600080fd5b505af115801561061d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610641919061140c565b5050505050565b6001600160e01b0319821663a94e78ef60e01b14156106e4576000818060200190518101906106779190611fc9565b905061068c8160200151858360600151610a56565b60608201526020810184905260405163a94e78ef60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a94e78ef906105ef90849060040161207c565b6001600160e01b031982166354e3f31b60e01b141561077f576000818060200190518101906107139190612357565b90506107288160400151858360800151610a56565b60808201526040808201859052516354e3f31b60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906354e3f31b906105ef908490600401612588565b6107a5792830b930b9bbb0b820b3b3b932b3b0ba37b92a3930b232b92b1960311b6103b7565b6107ae83610abd565b6040516020016101c29291906125aa565b84610641576107cd846103b7565b6101d160f51b6107dc856103b7565b61080f60f21b6107eb86610bff565b61016160f51b6107fa87610bff565b6040516101c29796959493929190601f60f91b90602001612602565b80158061089e5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9061084c903090869060040161151b565b60206040518083038186803b15801561086457600080fd5b505afa158015610878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c919061140c565b155b6108ba5760405162461bcd60e51b81526004016101e8906126d4565b61054e8363095ea7b360e01b84846040516024016108d99291906126e4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d0a565b60408051602a80825260608281019093526001600160a01b03841691600091602082018180368337019050509050603060f81b816000815181106109565761095661146f565b60200101906001600160f81b031916908160001a905350607860f81b816001815181106109855761098561146f565b60200101906001600160f81b031916908160001a90535060005b601481101561044a5760006109b58260026126ff565b90506109c3600f8516610d9c565b836109cf83602961271e565b815181106109df576109df61146f565b60200101906001600160f81b031916908160001a905350600484901c9350610a09600f8516610d9c565b83610a1583602861271e565b81518110610a2557610a2561146f565b60200101906001600160f81b031916908160001a9053505060049290921c9180610a4e81612735565b91505061099f565b6000828410610a66575080610ab6565b600084610a826ec097ce7bc90715b34b9f1000000000866126ff565b610a8c919061275f565b90506ec097ce7bc90715b34b9f1000000000610aa882856126ff565b610ab2919061275f565b9150505b9392505050565b60408051600a80825281830190925260609160e084901c91600091602082018180368337019050509050603060f81b81600081518110610aff57610aff61146f565b60200101906001600160f81b031916908160001a905350607860f81b81600181518110610b2e57610b2e61146f565b60200101906001600160f81b031916908160001a90535060005b600481101561044a576000610b5e8260026126ff565b9050610b6c600f8516610d9c565b83610b7883600961271e565b81518110610b8857610b8861146f565b60200101906001600160f81b031916908160001a905350600484901c9350610bb2600f8516610d9c565b83610bbe83600861271e565b81518110610bce57610bce61146f565b60200101906001600160f81b031916908160001a9053505060049290921c9180610bf781612735565b915050610b48565b606081610c235750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610c4d5780610c3781612735565b9150610c469050600a8361275f565b9150610c27565b6000816001600160401b03811115610c6757610c676111f9565b6040519080825280601f01601f191660200182016040528015610c91576020820181803683370190505b508593509050815b8015610d015780610ca981611458565b9150610cb89050600a85612773565b610cc3906030611485565b60f81b828281518110610cd857610cd861146f565b60200101906001600160f81b031916908160001a905350610cfa600a8561275f565b9350610c99565b50949350505050565b6000610d5f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610dc69092919063ffffffff16565b9050805160001480610d80575080806020019051810190610d80919061279a565b61054e5760405162461bcd60e51b81526004016101e890612802565b6000600a821015610dbb57610db2603083611485565b60f81b92915050565b610db2605783611485565b6060610dd58484600085610ddd565b949350505050565b606082471015610dff5760405162461bcd60e51b81526004016101e890612855565b600080866001600160a01b03168587604051610e1b9190612865565b60006040518083038185875af1925050503d8060008114610e58576040519150601f19603f3d011682016040523d82523d6000602084013e610e5d565b606091505b5091509150610e6e87838387610e79565b979650505050505050565b60608315610eb5578251610eae576001600160a01b0385163b610eae5760405162461bcd60e51b81526004016101e890612871565b5081610dd5565b610dd58383815115610eca5781518083602001fd5b8060405162461bcd60e51b81526004016101e891906111e8565b6001600160e01b031981165b82525050565b60208101610f048284610ee4565b92915050565b60006001600160a01b038216610f04565b6000610f0482610f0a565b6000610f0482610f1b565b610ef081610f26565b60208101610f048284610f31565b610f5181610f0a565b8114610f5c57600080fd5b50565b8035610f0481610f48565b80610f51565b8035610f0481610f6a565b60008083601f840112610f9057610f90600080fd5b5081356001600160401b03811115610faa57610faa600080fd5b602083019150836001820283011115610fc557610fc5600080fd5b9250929050565b600080600080600060808688031215610fe757610fe7600080fd5b6000610ff38888610f5f565b955050602061100488828901610f5f565b945050604061101588828901610f70565b93505060608601356001600160401b0381111561103457611034600080fd5b61104088828901610f7b565b92509250509295509295909350565b80610ef0565b60208101610f04828461104f565b600080600080600080600060c0888a03121561108157611081600080fd5b600061108d8a8a610f5f565b975050602061109e8a828b01610f5f565b96505060406110af8a828b01610f5f565b95505060606110c08a828b01610f5f565b94505060806110d18a828b01610f70565b93505060a08801356001600160401b038111156110f0576110f0600080fd5b6110fc8a828b01610f7b565b925092505092959891949750929550565b610ef081610f0a565b60208101610f04828461110d565b60005b8381101561113f578181015183820152602001611127565b838111156104985750506000910152565b600061115a825190565b611168818560208601611124565b9290920192915050565b600061117e8284611150565b7f3a2067657445786368616e6765436f7374206e6f7420696d706c656d656e74658152601960fa1b6020820152915060218201610ab6565b60006111c0825190565b8084526020840193506111d7818560208601611124565b601f01601f19169290920192915050565b60208082528101610ab681846111b6565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715611234576112346111f9565b6040525050565b600061124660405190565b9050611252828261120f565b919050565b60006001600160401b03821115611270576112706111f9565b601f19601f83011660200192915050565b82818337506000910152565b60006112a061129b84611257565b61123b565b9050828152602081018484840111156112bb576112bb600080fd5b61044a848285611281565b600082601f8301126112da576112da600080fd5b8135610dd584826020860161128d565b6000806040838503121561130057611300600080fd5b600061130c8585610f70565b92505060208301356001600160401b0381111561132b5761132b600080fd5b611337858286016112c6565b9150509250929050565b6001600160e01b03198116610f51565b8051610f0481611341565b600061136a61129b84611257565b90508281526020810184848401111561138557611385600080fd5b61044a848285611124565b600082601f8301126113a4576113a4600080fd5b8151610dd584826020860161135c565b600080604083850312156113ca576113ca600080fd5b60006113d68585611351565b92505060208301516001600160401b038111156113f5576113f5600080fd5b61133785828601611390565b8051610f0481610f6a565b60006020828403121561142157611421600080fd5b6000610dd58484611401565b6000611439828461104f565b50602001919050565b634e487b7160e01b600052601160045260246000fd5b60008161146757611467611442565b506000190190565b634e487b7160e01b600052603260045260246000fd5b6000821982111561149857611498611442565b500190565b6001600160f01b03198116610ef0565b6001600160f81b03198116610ef0565b60006114c98289611150565b91506114d5828861149d565b6002820191506114e58287611150565b91506114f1828661149d565b6002820191506115018285611150565b915061150d82846114ad565b506001019695505050505050565b60408101611529828561110d565b610ab6602083018461110d565b8051610f0481610f48565b60006001600160401b0382111561155a5761155a6111f9565b5060209081020190565b600060a0828403121561157957611579600080fd5b61158360a061123b565b905060006115918484611401565b82525060206115a284848301611536565b60208301525060406115b684828501611401565b60408301525060608201516001600160401b038111156115d8576115d8600080fd5b6115e484828501611390565b60608301525060806115f884828501611401565b60808301525092915050565b600061161261129b84611541565b8381529050602080820190840283018581111561163157611631600080fd5b835b818110156116715780516001600160401b0381111561165457611654600080fd5b8086016116618982611564565b8552505060209283019201611633565b5050509392505050565b600082601f83011261168f5761168f600080fd5b8151610dd5848260208601611604565b6000608082840312156116b4576116b4600080fd5b6116be608061123b565b905060006116cc8484611536565b82525060206116dd84848301611401565b60208301525060406116f184828501611401565b60408301525060608201516001600160401b0381111561171357611713600080fd5b61171f8482850161167b565b60608301525092915050565b600061173961129b84611541565b8381529050602080820190840283018581111561175857611758600080fd5b835b818110156116715780516001600160401b0381111561177b5761177b600080fd5b808601611788898261169f565b855250506020928301920161175a565b600082601f8301126117ac576117ac600080fd5b8151610dd584826020860161172b565b6000606082840312156117d1576117d1600080fd5b6117db606061123b565b905060006117e98484611536565b82525060206117fa84848301611401565b60208301525060408201516001600160401b0381111561181c5761181c600080fd5b61182884828501611798565b60408301525092915050565b600061184261129b84611541565b8381529050602080820190840283018581111561186157611861600080fd5b835b818110156116715780516001600160401b0381111561188457611884600080fd5b80860161189189826117bc565b8552505060209283019201611863565b600082601f8301126118b5576118b5600080fd5b8151610dd5848260208601611834565b6000604082840312156118da576118da600080fd5b6118e4604061123b565b905060006118f28484611401565b82525060208201516001600160401b0381111561191157611911600080fd5b61191d848285016118a1565b60208301525092915050565b600061193761129b84611541565b8381529050602080820190840283018581111561195657611956600080fd5b835b818110156116715780516001600160401b0381111561197957611979600080fd5b80860161198689826118c5565b8552505060209283019201611958565b600082601f8301126119aa576119aa600080fd5b8151610dd5848260208601611929565b6001600160801b03198116610f51565b8051610f04816119ba565b600061016082840312156119eb576119eb600080fd5b6119f661016061123b565b90506000611a048484611536565b8252506020611a1584848301611401565b6020830152506040611a2984828501611401565b6040830152506060611a3d84828501611401565b6060830152506080611a5184828501611536565b60808301525060a08201516001600160401b03811115611a7357611a73600080fd5b611a7f84828501611996565b60a08301525060c0611a9384828501611536565b60c08301525060e0611aa784828501611401565b60e0830152506101008201516001600160401b03811115611aca57611aca600080fd5b611ad684828501611390565b61010083015250610120611aec84828501611401565b61012083015250610140611b02848285016119ca565b6101408301525092915050565b600060208284031215611b2457611b24600080fd5b81516001600160401b03811115611b3d57611b3d600080fd5b610dd5848285016119d5565b805160009060a0840190611b5d858261104f565b506020830151611b70602086018261110d565b506040830151611b83604086018261104f565b5060608301518482036060860152611b9b82826111b6565b915050608083015161044a608086018261104f565b6000610ab68383611b49565b6000611bc6825190565b80845260208401935083602082028501611be08560200190565b8060005b85811015611c155784840389528151611bfd8582611bb0565b94506020830160209a909a0199925050600101611be4565b5091979650505050505050565b80516000906080840190611c36858261110d565b506020830151611c49602086018261104f565b506040830151611c5c604086018261104f565b5060608301518482036060860152611c748282611bbc565b95945050505050565b6000610ab68383611c22565b6000611c93825190565b80845260208401935083602082028501611cad8560200190565b8060005b85811015611c155784840389528151611cca8582611c7d565b94506020830160209a909a0199925050600101611cb1565b80516000906060840190611cf6858261110d565b506020830151611d09602086018261104f565b5060408301518482036040860152611c748282611c89565b6000610ab68383611ce2565b6000611d37825190565b80845260208401935083602082028501611d518560200190565b8060005b85811015611c155784840389528151611d6e8582611d21565b94506020830160209a909a0199925050600101611d55565b80516000906040840190611d9a858261104f565b5060208301518482036020860152611c748282611d2d565b6000610ab68383611d86565b6000611dc8825190565b80845260208401935083602082028501611de28560200190565b8060005b85811015611c155784840389528151611dff8582611db2565b94506020830160209a909a0199925050600101611de6565b6001600160801b03198116610ef0565b8051600090610160840190611e3c858261110d565b506020830151611e4f602086018261104f565b506040830151611e62604086018261104f565b506060830151611e75606086018261104f565b506080830151611e88608086018261110d565b5060a083015184820360a0860152611ea08282611dbe565b91505060c0830151611eb560c086018261110d565b5060e0830151611ec860e086018261104f565b50610100830151848203610100860152611ee282826111b6565b915050610120830151611ef961012086018261104f565b5061014083015161044a610140860182611e17565b60208082528101610ab68184611e27565b60006101608284031215611f3557611f35600080fd5b611f4061016061123b565b90506000611f4e8484611536565b8252506020611f5f84848301611401565b6020830152506040611f7384828501611401565b6040830152506060611f8784828501611401565b6060830152506080611f9b84828501611536565b60808301525060a08201516001600160401b03811115611fbd57611fbd600080fd5b611a7f848285016118a1565b600060208284031215611fde57611fde600080fd5b81516001600160401b03811115611ff757611ff7600080fd5b610dd584828501611f1f565b8051600090610160840190612018858261110d565b50602083015161202b602086018261104f565b50604083015161203e604086018261104f565b506060830151612051606086018261104f565b506080830151612064608086018261110d565b5060a083015184820360a0860152611ea08282611d2d565b60208082528101610ab68184612003565b600061209b61129b84611541565b838152905060208082019084028301858111156120ba576120ba600080fd5b835b8181101561167157806120cf8882611536565b845250602092830192016120bc565b600082601f8301126120f2576120f2600080fd5b8151610dd584826020860161208d565b600061211061129b84611541565b8381529050602080820190840283018581111561212f5761212f600080fd5b835b8181101561167157806121448882611401565b84525060209283019201612131565b600082601f83011261216757612167600080fd5b8151610dd5848260208601612102565b60006101e0828403121561218d5761218d600080fd5b6121986101e061123b565b905060006121a68484611536565b82525060206121b784848301611536565b60208301525060406121cb84828501611401565b60408301525060606121df84828501611401565b60608301525060806121f384828501611401565b60808301525060a08201516001600160401b0381111561221557612215600080fd5b612221848285016120de565b60a08301525060c08201516001600160401b0381111561224357612243600080fd5b61224f84828501611390565b60c08301525060e08201516001600160401b0381111561227157612271600080fd5b61227d84828501612153565b60e0830152506101008201516001600160401b038111156122a0576122a0600080fd5b6122ac84828501612153565b610100830152506101206122c284828501611536565b610120830152506101406122d884828501611536565b610140830152506101606122ee84828501611401565b610160830152506101808201516001600160401b0381111561231257612312600080fd5b61231e84828501611390565b610180830152506101a061233484828501611401565b6101a0830152506101c061234a848285016119ca565b6101c08301525092915050565b60006020828403121561236c5761236c600080fd5b81516001600160401b0381111561238557612385600080fd5b610dd584828501612177565b600061239d838361110d565b505060200190565b60006123af825190565b80845260209384019383018060005b838110156123e35781516123d28882612391565b9750602083019250506001016123be565b509495945050505050565b600061239d838361104f565b6000612404825190565b80845260209384019383018060005b838110156123e357815161242788826123ee565b975060208301925050600101612413565b80516000906101e084019061244d858261110d565b506020830151612460602086018261110d565b506040830151612473604086018261104f565b506060830151612486606086018261104f565b506080830151612499608086018261104f565b5060a083015184820360a08601526124b182826123a5565b91505060c083015184820360c08601526124cb82826111b6565b91505060e083015184820360e08601526124e582826123fa565b91505061010083015184820361010086015261250182826123fa565b91505061012083015161251861012086018261110d565b5061014083015161252d61014086018261110d565b5061016083015161254261016086018261104f565b5061018083015184820361018086015261255c82826111b6565b9150506101a08301516125736101a086018261104f565b506101c083015161044a6101c0860182611e17565b60208082528101610ab68184612438565b601f60f91b815260005b5060010190565b60006125b68285611150565b7f3a20496e76616c69642050617261737761702066756e6374696f6e2073656c6581526518dd1bdc880f60d21b602082015260260191506125f78284611150565b9150610dd582612599565b600061260e828b611150565b915061261a828a61149d565b60028201915061262a8289611150565b9150612636828861149d565b6002820191506126468287611150565b9150612652828661149d565b6002820191506126628285611150565b915061266e82846114ad565b5060010198975050505050505050565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015291505b5060400190565b60208082528101610f048161267e565b604081016126f2828561110d565b610ab6602083018461104f565b600081600019048311821515161561271957612719611442565b500290565b60008282101561273057612730611442565b500390565b60006000198214156125a3576125a3611442565b634e487b7160e01b600052601260045260246000fd5b60008261276e5761276e612749565b500490565b60008261278257612782612749565b500690565b801515610f51565b8051610f0481612787565b6000602082840312156127af576127af600080fd5b6000610dd5848461278f565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506126cd565b60208082528101610f04816127bb565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506126cd565b60208082528101610f0481612812565b6000610ab68284611150565b60208082528101610f0481601d81527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060208201526040019056fea264697066735822122031b4629564ed3a3e7a188319b9f396ebbf4f114b3791740e16be31469638244464736f6c63430008090033000000000000000000000000b83b554730d29ce4cb55bb42206c3e2c03e4a40a000000000000000000000000c8a21fcd5a100c3ecc037c97e2f9c53a8d3a02a1000000000000000000000000836b557cf9ef29fcf49c776841191782df34e4e5