//
0x60806040523480156200001157600080fd5b50604051620023c1380380620023c18339810160408190526200003491620001bc565b6000620000496001600160e01b03620000e416565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b038087166001600160a01b0319928316179092556001805492861692909116919091179055620000d7826001600160e01b03620000e816565b60045550620002ca915050565b3390565b620000fb6001600160e01b036200016d16565b620001235760405162461bcd60e51b81526004016200011a9062000261565b60405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4da9c22c924692646a21cf1f423781ae3285198dc22e8a6912835d3272b90b3c90600090a250565b600080546001600160a01b03166200018d6001600160e01b03620000e416565b6001600160a01b031614905090565b8051620001a981620002a5565b92915050565b8051620001a981620002bf565b60008060008060808587031215620001d357600080fd5b6000620001e187876200019c565b9450506020620001f4878288016200019c565b935050604062000207878288016200019c565b92505060606200021a87828801620001af565b91505092959194509250565b60006200023560208362000273565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60208082528101620001a98162000226565b90815260200190565b6000620001a98262000296565b6000620001a9826200027c565b6001600160a01b031690565b90565b620002b08162000289565b8114620002bc57600080fd5b50565b620002b081620002a2565b6120e780620002da6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806375a1608d116100b8578063a8c62e761161007c578063a8c62e7614610276578063b82ac6ae1461027e578063cf35bdd014610291578063daccaf63146102a4578063f2cf057f146102b7578063f2fde38b146102bf57610142565b806375a1608d1461020657806379fcd8ee146102195780638da5cb5b1461022c5780638f32d59b14610241578063988b1fa71461025657610142565b80635146bb5d1161010a5780635146bb5d146101aa578063584884c7146101bd5780635b302d09146101d057806367a5cd06146101e35780636db5c8fd146101f6578063715018a6146101fe57610142565b8063166ebd0414610147578063186f0354146101705780632a541bdb146101855780632b83cccd1461018d5780634fb3ccc5146101a2575b600080fd5b61015a6101553660046117e4565b6102d2565b6040516101679190611f91565b60405180910390f35b610178610334565b6040516101679190611e64565b61015a610343565b6101a061019b36600461183c565b61034c565b005b610178610603565b6101a06101b8366004611802565b610612565b61015a6101cb366004611802565b6107f0565b6101a06101de36600461183c565b6108e8565b6101a06101f13660046117e4565b610ba0565b61015a610ccd565b6101a0610cd3565b6101a0610214366004611889565b610d41565b6101a0610227366004611802565b610fc1565b610234611129565b6040516101679190611dd4565b610249611138565b6040516101679190611e56565b6102696102643660046117e4565b61115c565b6040516101679190611f83565b61017861127e565b61015a61028c366004611802565b61128d565b61023461029f366004611926565b611355565b6101a06102b2366004611908565b61137c565b61015a6113ea565b6101a06102cd3660046117e4565b6113f0565b6001600160a01b03811660009081526006602052604081206005810154806102ff5760009250505061032f565b61032a61031d8360030154846002015461141d90919063ffffffff16565b829063ffffffff61146616565b925050505b919050565b6001546001600160a01b031681565b64e8d4a5100081565b600254604051630f41a04d60e11b81526001600160a01b0390911690631e83409a9061037c903390600401611de2565b600060405180830381600087803b15801561039657600080fd5b505af11580156103aa573d6000803e3d6000fd5b505050506103b783610ba0565b6001600160a01b03808416600090815260066020526040808220600354815460028301546004808501549551631b02f7e160e01b815294979390931694631b02f7e194610406948a9101611fc8565b60206040518083038186803b15801561041e57600080fd5b505afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104569190810190611944565b905061049161048064e8d4a51000610474848263ffffffff61146616565b9063ffffffff6114a816565b60048401549063ffffffff61141d16565b600483015560006104ad8264e8d4a5100063ffffffff61146616565b90506000811180156104bf5750848110155b6104e45760405162461bcd60e51b81526004016104db90611ee3565b60405180910390fd5b60025460405163a3ffa9cd60e01b81526001600160a01b039091169063a3ffa9cd906105169033908890600401611df0565b600060405180830381600087803b15801561053057600080fd5b505af1158015610544573d6000803e3d6000fd5b50506001546040516317d5759960e31b81526001600160a01b03909116925063beabacc8915061057c90899033908690600401611e0b565b600060405180830381600087803b15801561059657600080fd5b505af11580156105aa573d6000803e3d6000fd5b50505050856001600160a01b0316336001600160a01b03167fa28d80c9910787c0c058ed9b50c577f1389264bf61563fa45529e0771976f56283876040516105f3929190611f9f565b60405180910390a3505050505050565b6002546001600160a01b031681565b61061b82610ba0565b6001600160a01b0382166000908152600660205260409020600581015464e8d4a51000908061065c5760405162461bcd60e51b81526004016104db90611f23565b60028301548085118015610683575060045461067f90439063ffffffff6114e216565b8511155b61069f5760405162461bcd60e51b81526004016104db90611ea3565b60006106b584610474844363ffffffff61141d16565b905060006106fd826106f16106d182600163ffffffff61141d16565b6106e5886104748d8a63ffffffff61141d16565b9063ffffffff6114e216565b9063ffffffff61146616565b600154909150610722906001600160a01b038a8116913391168463ffffffff61150716565b610742610735828763ffffffff6114a816565b859063ffffffff6114e216565b935061075b856001600160701b0363ffffffff6114a816565b600487015461077190869063ffffffff6114e216565b111561078f5760405162461bcd60e51b81526004016104db90611f63565b600586018490556002860187905585546040516001600160a01b038a169133917f0f0ce87d28aac0c07b026cb6025932cb4009646aeac7965d4cf463fdb1dd9ce0916107de9186918d91611fad565b60405180910390a35050505050505050565b6000808211801561080857506001600160701b038211155b6108245760405162461bcd60e51b81526004016104db90611ee3565b61082c61176e565b6108358461115c565b6003548151604083015160808401519394506001600160a01b039092169263c8c4d43a929061086f8864e8d4a5100063ffffffff6114a816565b6040518563ffffffff1660e01b815260040161088e9493929190611fc8565b60206040518083038186803b1580156108a657600080fd5b505afa1580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108de9190810190611944565b9150505b92915050565b6000821180156108ff57506001600160701b038211155b61091b5760405162461bcd60e51b81526004016104db90611ee3565b600254604051630f41a04d60e11b81526001600160a01b0390911690631e83409a9061094b903390600401611de2565b600060405180830381600087803b15801561096557600080fd5b505af1158015610979573d6000803e3d6000fd5b5050505061098683610ba0565b6001600160a01b0380841660009081526006602052604081206004810154600354825460028401549395929493919092169163c8c4d43a91856109d48a64e8d4a5100063ffffffff6114a816565b6040518563ffffffff1660e01b81526004016109f39493929190611fc8565b60206040518083038186803b158015610a0b57600080fd5b505afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a439190810190611944565b905083811115610a655760405162461bcd60e51b81526004016104db90611eb3565b610a8a610a7d8664e8d4a5100063ffffffff6114a816565b839063ffffffff61141d16565b60048085019190915560025460405163a3ffa9cd60e01b81526001600160a01b039091169163a3ffa9cd91610ac3913391869101611df0565b600060405180830381600087803b158015610add57600080fd5b505af1158015610af1573d6000803e3d6000fd5b50506001546040516317d5759960e31b81526001600160a01b03909116925063beabacc89150610b2990899033908a90600401611e0b565b600060405180830381600087803b158015610b4357600080fd5b505af1158015610b57573d6000803e3d6000fd5b50505050856001600160a01b0316336001600160a01b03167fa28d80c9910787c0c058ed9b50c577f1389264bf61563fa45529e0771976f56287846040516105f3929190611f9f565b6001600160a01b0381166000908152600660205260409020600581015480610bc9575050610cca565b600382015460028301544391908282101580610be55750808210155b15610bf4575050505050610cca565b6000818410610c04575083610c3a565b610c37610c17838563ffffffff61141d16565b6106f1610c2a878763ffffffff61141d16565b889063ffffffff6114a816565b90505b80610c4a57505050505050610cca565b610c5a858263ffffffff61141d16565b60058701556004860154610c74908263ffffffff6114e216565b6004870155600386018490556040516001600160a01b038816907ff616b63fa85386183d388f90cb6006662c309731f969461cd877ee055b306e3a90610cbb908490611f91565b60405180910390a25050505050505b50565b60045481565b610cdb611138565b610cf75760405162461bcd60e51b81526004016104db90611f33565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600082118015610d5357506004548211155b610d6f5760405162461bcd60e51b81526004016104db90611f43565b818310158015610d8657506001600160701b038311155b610da25760405162461bcd60e51b81526004016104db90611ee3565b64e8d4a5100081610dc757610dc4816001600160701b0363ffffffff6114a816565b91505b610dd085610ba0565b6001600160a01b038516600090815260066020526040902060058101548015610e0b5760405162461bcd60e51b81526004016104db90611e83565b610e1b868463ffffffff6114a816565b9050610e34836001600160701b0363ffffffff6114a816565b6004830154610e4a90839063ffffffff6114e216565b1115610e685760405162461bcd60e51b81526004016104db90611f63565b80841015610e885760405162461bcd60e51b81526004016104db90611f03565b610e9f836001600160701b0363ffffffff6114a816565b841115610ebe5760405162461bcd60e51b81526004016104db90611e93565b6000610ed0438763ffffffff6114e216565b600154909150610ef5906001600160a01b038a8116913391168a63ffffffff61150716565b600583018290556002830181905543600384018190556001840155848355600683015460ff16610f7a57600683018054600160ff1990911681179091556005805491820181556000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b038a161790555b876001600160a01b0316336001600160a01b03167f0f0ce87d28aac0c07b026cb6025932cb4009646aeac7965d4cf463fdb1dd9ce08984896040516107de93929190611fad565b600081118015610fd857506001600160701b038111155b610ff45760405162461bcd60e51b81526004016104db90611ee3565b610ffd82610ba0565b6001600160a01b0382166000908152600660205260409020600581015464e8d4a51000908061103e5760405162461bcd60e51b81526004016104db90611f23565b600154611060906001600160a01b03878116913391168763ffffffff61150716565b611080611073858463ffffffff6114a816565b829063ffffffff6114e216565b9050611099826001600160701b0363ffffffff6114a816565b60048401546110af90839063ffffffff6114e216565b11156110cd5760405162461bcd60e51b81526004016104db90611f63565b60058301819055600283015483546040516001600160a01b0388169233927f0f0ce87d28aac0c07b026cb6025932cb4009646aeac7965d4cf463fdb1dd9ce09261111a928a929091611fad565b60405180910390a35050505050565b6000546001600160a01b031690565b600080546001600160a01b031661114d611568565b6001600160a01b031614905090565b61116461176e565b61116c61176e565b506001600160a01b038216600090815260066020818152604092839020835160e081018552815481526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a08201819052929091015460ff16151560c082015290806111ea5750905061032f565b6060820151604083015143919082821015806112065750808210155b1561121857849550505050505061032f565b600081841061122857508361123e565b61123b610c17838563ffffffff61141d16565b90505b6080860151611253908263ffffffff6114e216565b608087015260a086015161126d908263ffffffff61141d16565b60a087015250939695505050505050565b6003546001600160a01b031681565b600061129761176e565b6112a08461115c565b600354815160408084015160808501519151631b02f7e160e01b81529495506000946001600160a01b0390941693631b02f7e1936112e5939092918a90600401611fc8565b60206040518083038186803b1580156112fd57600080fd5b505afa158015611311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113359190810190611944565b905061134c8164e8d4a5100063ffffffff61146616565b95945050505050565b6005818154811061136257fe5b6000918252602090912001546001600160a01b0316905081565b611384611138565b6113a05760405162461bcd60e51b81526004016104db90611f33565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4da9c22c924692646a21cf1f423781ae3285198dc22e8a6912835d3272b90b3c90600090a250565b60055490565b6113f8611138565b6114145760405162461bcd60e51b81526004016104db90611f33565b610cca8161156c565b600061145f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115ed565b9392505050565b600061145f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611619565b6000826114b7575060006108e2565b828202828482816114c457fe5b041461145f5760405162461bcd60e51b81526004016104db90611f13565b60008282018381101561145f5760405162461bcd60e51b81526004016104db90611ed3565b6040516115629085906323b872dd60e01b9061152b90879087908790602401611e3b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611650565b50505050565b3390565b6001600160a01b0381166115925760405162461bcd60e51b81526004016104db90611ec3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081848411156116115760405162461bcd60e51b81526004016104db9190611e72565b505050900390565b6000818361163a5760405162461bcd60e51b81526004016104db9190611e72565b50600083858161164657fe5b0495945050505050565b611662826001600160a01b0316611735565b61167e5760405162461bcd60e51b81526004016104db90611f73565b60006060836001600160a01b03168360405161169a9190611dc8565b6000604051808303816000865af19150503d80600081146116d7576040519150601f19603f3d011682016040523d82523d6000602084013e6116dc565b606091505b5091509150816116fe5760405162461bcd60e51b81526004016104db90611ef3565b805115611562578080602001905161171991908101906118ea565b6115625760405162461bcd60e51b81526004016104db90611f53565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061032a575050151592915050565b6040518060e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b80356108e281612075565b80516108e281612089565b80356108e281612092565b80356108e28161209b565b80516108e28161209b565b6000602082840312156117f657600080fd5b60006108de84846117ad565b6000806040838503121561181557600080fd5b600061182185856117ad565b9250506020611832858286016117ce565b9150509250929050565b60008060006060848603121561185157600080fd5b600061185d86866117ad565b935050602061186e868287016117ce565b925050604061187f868287016117ce565b9150509250925092565b6000806000806080858703121561189f57600080fd5b60006118ab87876117ad565b94505060206118bc878288016117ce565b93505060406118cd878288016117ce565b92505060606118de878288016117ce565b91505092959194509250565b6000602082840312156118fc57600080fd5b60006108de84846117b8565b60006020828403121561191a57600080fd5b60006108de84846117c3565b60006020828403121561193857600080fd5b60006108de84846117ce565b60006020828403121561195657600080fd5b60006108de84846117d9565b61196b81612034565b82525050565b61196b8161200a565b61196b81612015565b600061198e82611ffd565b611998818561032f565b93506119a881856020860161203f565b9290920192915050565b61196b8161201a565b60006119c682611ffd565b6119d08185612001565b93506119e081856020860161203f565b6119e98161206b565b9093019392505050565b6000611a00600c83612001565b6b1858dd1a5d9948185cdcd95d60a21b815260200192915050565b6000611a28601183612001565b70746f6f20626967206b6f6e7374616e746560781b815260200192915050565b6000611a55601183612001565b70696e76616c696420656e6420626c6f636b60781b815260200192915050565b6000611a82601683612001565b75696e73756666696369656e7420616c6c6f77616e636560501b815260200192915050565b6000611ab4602683612001565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000611afc601b83612001565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611b35600e83612001565b6d1a5b9d985b1a5908185b5bdd5b9d60921b815260200192915050565b6000611b5f602083612001565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000611b98601383612001565b72746f6f20736d616c6c206b6f6e7374616e746560681b815260200192915050565b6000611bc7602183612001565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000611c0a600e83612001565b6d1a5b9858dd1a5d9948185cdcd95d60921b815260200192915050565b6000611c34602083612001565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611c6d601083612001565b6f34b73b30b634b210323ab930ba34b7b760811b815260200192915050565b6000611c99602a83612001565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000611ce5600f83612001565b6e746f6f206d75636820766f6c756d6560881b815260200192915050565b6000611d10601f83612001565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b805160e0830190611d4d8482611dbf565b506020820151611d606020850182611dbf565b506040820151611d736040850182611dbf565b506060820151611d866060850182611dbf565b506080820151611d996080850182611dbf565b5060a0820151611dac60a0850182611dbf565b5060c082015161156260c085018261197a565b61196b81612031565b600061145f8284611983565b602081016108e28284611971565b602081016108e28284611962565b60408101611dfe8285611962565b61145f6020830184611dbf565b60608101611e198286611971565b611e266020830185611962565b611e336040830184611dbf565b949350505050565b60608101611e498286611971565b611e266020830185611971565b602081016108e2828461197a565b602081016108e282846119b2565b6020808252810161145f81846119bb565b602080825281016108e2816119f3565b602080825281016108e281611a1b565b602080825281016108e281611a48565b602080825281016108e281611a75565b602080825281016108e281611aa7565b602080825281016108e281611aef565b602080825281016108e281611b28565b602080825281016108e281611b52565b602080825281016108e281611b8b565b602080825281016108e281611bba565b602080825281016108e281611bfd565b602080825281016108e281611c27565b602080825281016108e281611c60565b602080825281016108e281611c8c565b602080825281016108e281611cd8565b602080825281016108e281611d03565b60e081016108e28284611d3c565b602081016108e28284611dbf565b60408101611dfe8285611dbf565b60608101611fbb8286611dbf565b611e266020830185611dbf565b60808101611fd68287611dbf565b611fe36020830186611dbf565b611ff06040830185611dbf565b61134c6060830184611dbf565b5190565b90815260200190565b60006108e282612025565b151590565b60006108e28261200a565b6001600160a01b031690565b90565b60006108e28261201a565b60005b8381101561205a578181015183820152602001612042565b838111156115625750506000910152565b601f01601f191690565b61207e8161200a565b8114610cca57600080fd5b61207e81612015565b61207e8161201a565b61207e8161203156fea365627a7a72315820a93b537686c6ab5d616f9cf79e353808de148e805c46621a65359088a612cda76c6578706572696d656e74616cf564736f6c63430005110040000000000000000000000000970f9bc739613afb896428df2e2d36b8e8c8b502000000000000000000000000187eb635e7f2bce5ec6c2dd03323e2632ad73945000000000000000000000000baf1c6c6ecdbfecc76cb28cc0014bc4f8faed7820000000000000000000000000000000000000000000000000000000000001c20