0x6080604052600436106101755760003560e01c8063c03ebe50116100cb578063f2fde38b1161007f578063f64dd29f11610059578063f64dd29f146103b4578063ff9c8ac6146103d4578063ffded98d146103f457610175565b8063f2fde38b1461036a578063f45346dc1461038c578063f4bf3db31461039f57610175565b8063c6bbd5a7116100b0578063c6bbd5a714610320578063ddca3f4314610335578063e9ccf7a61461035757610175565b8063c03ebe50146102f8578063c45a01551461030b57610175565b806369328dec1161012d5780638f32d59b116101075780638f32d59b146102965780639f0f0307146102b8578063ac41865a146102d857610175565b806369328dec146102315780638a12a79f1461025f5780638da5cb5b1461028157610175565b80632d92b0301161015e5780632d92b030146101d157806350f62da7146101f157806353b609b51461021157610175565b8063080cb01e1461017a578063269528ab146101b0575b600080fd5b34801561018657600080fd5b5061019a610195366004612115565b610414565b6040516101a791906126be565b60405180910390f35b6101c36101be366004612167565b6107f3565b6040516101a79291906126c7565b3480156101dd57600080fd5b5061019a6101ec36600461221e565b61080e565b3480156101fd57600080fd5b5061019a61020c366004612024565b610a0f565b34801561021d57600080fd5b5061019a61022c366004612094565b610a29565b34801561023d57600080fd5b5061025161024c3660046120d4565b610b81565b6040516101a7929190612412565b34801561026b57600080fd5b50610274610b9c565b6040516101a79190612387565b34801561028d57600080fd5b50610274610bc0565b3480156102a257600080fd5b506102ab610bcf565b6040516101a7919061245b565b3480156102c457600080fd5b5061019a6102d33660046120d4565b610be0565b3480156102e457600080fd5b5061019a6102f336600461205c565b610c95565b6102516103063660046121ce565b610d65565b34801561031757600080fd5b50610274610d80565b34801561032c57600080fd5b50610274610da4565b34801561034157600080fd5b5061034a610dc8565b6040516101a791906126ae565b61019a610365366004612115565b610dda565b34801561037657600080fd5b5061038a610385366004612024565b610fdd565b005b61025161039a3660046120d4565b611042565b3480156103ab57600080fd5b5061027461105d565b3480156103c057600080fd5b5061019a6103cf3660046120d4565b61106c565b3480156103e057600080fd5b5061019a6103ef3660046120d4565b611151565b34801561040057600080fd5b5061038a61040f366004612024565b611272565b600080826001600160a01b031663e78cea926040518163ffffffff1660e01b815260040160206040518083038186803b15801561045057600080fd5b505afa158015610464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104889190612040565b6001549091506000906001600160a01b031615806104b357506001546001600160a01b038381169116145b806104cb57506001546001600160a01b038881169116145b156104e6576104dc87878488610dda565b60010190506106f1565b6040516370a0823160e01b81526000906001600160a01b038916906370a0823190610515903090600401612387565b60206040518083038186803b15801561052d57600080fd5b505afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056591906122f8565b9050868110156105905760405162461bcd60e51b815260040161058790612579565b60405180910390fd5b6105bb887f000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564836112fa565b60006040518060a001604052806105e88b600160009054906101000a90046001600160a01b0316886113c0565b8152602001886001600160a01b03168152602001428152602001838152602001600081525090507f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663c04b8d59826040518263ffffffff1660e01b815260040161065b91906125b0565b602060405180830381600087803b15801561067557600080fd5b505af1158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad91906122f8565b92507f68936c305aa3d7463115da1f248800ec32837d788e516d7c667cf8b6bffc6263898386868b6040516106e695949392919061242b565b60405180910390a150505b6000846001600160a01b031663c8a4271f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561072c57600080fd5b505afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107649190612040565b60405163c7bf8cf560e01b81529091506001600160a01b0382169063c7bf8cf5906107959086908690600401612412565b60206040518083038186803b1580156107ad57600080fd5b505afa1580156107c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e591906122f8565b93505050505b949350505050565b60008060405162461bcd60e51b8152600401610587906124d4565b60008361081d575060006107eb565b6000826001600160a01b031663c8a4271f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561085857600080fd5b505afa15801561086c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108909190612040565b90506000836001600160a01b031663e78cea926040518163ffffffff1660e01b815260040160206040518083038186803b1580156108cd57600080fd5b505afa1580156108e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109059190612040565b9050806001600160a01b0316876001600160a01b031614156109a85760405163c7bf8cf560e01b81526001600160a01b0383169063c7bf8cf59061094f9084908a90600401612412565b60206040518083038186803b15801561096757600080fd5b505afa15801561097b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099f91906122f8565b925050506107eb565b60018560018111156109b657fe5b14156109f457816001600160a01b031663c7bf8cf5826109d78a8a8661106c565b6040518363ffffffff1660e01b815260040161094f929190612412565b816001600160a01b031663c7bf8cf5826109d78a8a86611151565b600060405162461bcd60e51b81526004016105879061249d565b6001546000906001600160a01b03161580610a5157506001546001600160a01b038581169116145b80610a6957506001546001600160a01b038481169116145b15610ab7576000610a7a8585611402565b90506000610a8a82858789611491565b600054909150600160a01b900462ffffff16620f424090810390820281610aad57fe5b0492505050610b7a565b600154600090610ad0906001600160a01b031685611402565b600154909150600090610af1908390869088906001600160a01b0316611491565b600054909150600160a01b900462ffffff16620f424090810390820281610b1457fe5b6001549190049150600090610b339088906001600160a01b0316611402565b600154909150610b5090829084906001600160a01b03168a611491565b600054909250600160a01b900462ffffff16620f424090810390830281610b7357fe5b0493505050505b9392505050565b60008060405162461bcd60e51b815260040161058790612542565b7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6000805460405163f7729d4360e01b81527f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab66001600160a01b03169163f7729d4391610c439188918791600160a01b900462ffffff1690899088906004016123dd565b602060405180830381600087803b158015610c5d57600080fd5b505af1158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107eb91906122f8565b600080610ca284846115b5565b90506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610cdf57600080fd5b505afa158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190612258565b505050505050905060c0610d58670de0b6b3a7640000610d52846001600160a01b0316856001600160a01b031661166490919063ffffffff16565b90611664565b901c925050505b92915050565b60008060405162461bcd60e51b81526004016105879061250b565b7f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98481565b7f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab681565b600054600160a01b900462ffffff1681565b600080856001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610e099190612387565b60206040518083038186803b158015610e2157600080fd5b505afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5991906122f8565b905084811015610e7b5760405162461bcd60e51b815260040161058790612579565b610ea6867f000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564836112fa565b60408051610100810182526001600160a01b038881168252868116602083015260008054600160a01b900462ffffff1683850152868216606084015242608084015260a0830185905260c0830181905260e0830152915163414bf38960e01b815290917f000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564169063414bf38990610f4090849060040161263f565b602060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9291906122f8565b92507f68936c305aa3d7463115da1f248800ec32837d788e516d7c667cf8b6bffc62638783878688604051610fcb95949392919061242b565b60405180910390a15050949350505050565b610fe5610bcf565b611036576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61103f816116bd565b50565b60008060405162461bcd60e51b815260040161058790612466565b6001546001600160a01b031681565b6001546000906001600160a01b0316158061109457506001546001600160a01b038581169116145b806110ac57506001546001600160a01b038381169116145b156110d35760006110bd8584611402565b90506110cb81858786611491565b915050610b7a565b6001546000906110ed9086906001600160a01b0316611402565b60015490915060009061110e908390879089906001600160a01b0316611491565b60015490915060009061112a906001600160a01b031686611402565b60015490915061114790829084906001600160a01b031688611491565b9350505050610b7a565b600080548190620f424090600160a01b900462ffffff168502600154919004850391506001600160a01b0316158061119657506001546001600160a01b038681169116145b806111ae57506001546001600160a01b038481169116145b156111d65760006111bf8685611402565b90506111cd81838887611491565b92505050610b7a565b6001546000906111f09087906001600160a01b0316611402565b60015490915060009061121190839085908a906001600160a01b0316611491565b600054909150620f424090600160a01b900462ffffff1682026001549190048203935060009061124a906001600160a01b031687611402565b60015490915061126790829086906001600160a01b031689611491565b945050505050610b7a565b61127a610bcf565b6112cb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e9061132b903090879060040161239b565b60206040518083038186803b15801561134357600080fd5b505afa158015611357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137b91906122f8565b90508061139d576113986001600160a01b03851684600019611731565b6113ba565b818110156113ba576113ba6001600160a01b03851684831961185e565b50505050565b6000546040516060916113ea918691600160a01b900462ffffff169086908290879060200161231d565b60405160208183030381529060405290509392505050565b60008061140f84846115b5565b9050806001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561144a57600080fd5b505afa15801561145e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114829190612258565b50939998505050505050505050565b60008061149d8661195e565b90506fffffffffffffffffffffffffffffffff6001600160a01b03821611611527576001600160a01b03808216800290848116908616106114fe576114f9600160c01b876fffffffffffffffffffffffffffffffff1683611c90565b61151f565b61151f81876fffffffffffffffffffffffffffffffff16600160c01b611c90565b9250506115ac565b60006115466001600160a01b0383168068010000000000000000611c90565b9050836001600160a01b0316856001600160a01b03161061158757611582600160801b876fffffffffffffffffffffffffffffffff1683611c90565b6115a8565b6115a881876fffffffffffffffffffffffffffffffff16600160801b611c90565b9250505b50949350505050565b60008054604051630b4c774160e11b81527f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9846001600160a01b031691631698ee82916116149187918791600160a01b900462ffffff16906004016123b5565b60206040518083038186803b15801561162c57600080fd5b505afa158015611640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190612040565b60008261167357506000610d5f565b8282028284828161168057fe5b0414610b7a5760405162461bcd60e51b81526004018080602001828103825260218152602001806127116021913960400191505060405180910390fd5b6001600160a01b0381166117025760405162461bcd60e51b81526004018080602001828103825260268152602001806126eb6026913960400191505060405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b8015806117b7575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561178957600080fd5b505afa15801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b5051155b6117f25760405162461bcd60e51b815260040180806020018281038252603681526020018061275c6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b179052611859908490611d3f565b505050565b60006118f482856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156118c257600080fd5b505afa1580156118d6573d6000803e3d6000fd5b505050506040513d60208110156118ec57600080fd5b505190611df0565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b1790529091506113ba908590611d3f565b60008060008360020b12611975578260020b61197d565b8260020b6000035b9050620d89e88111156119bb576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b6000600182166119cf57600160801b6119e1565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611a15576ffff97272373d413259a46990580e213a0260801c5b6004821615611a34576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611a53576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611a72576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611a91576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611ab0576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611acf576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611aef576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611b0f576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611b2f576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611b4f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611b6f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611b8f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611baf576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611bcf576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611bf0576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611c10576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611c2f576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611c4c576b048a170391f7dc42444e8fa20260801c5b60008460020b1315611c67578060001981611c6357fe5b0490505b640100000000810615611c7b576001611c7e565b60005b60ff16602082901c0192505050919050565b6000808060001985870986860292508281109083900303905080611cc65760008411611cbb57600080fd5b508290049050610b7a565b808411611cd257600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000611d94826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e4a9092919063ffffffff16565b80519091501561185957808060200190516020811015611db357600080fd5b50516118595760405162461bcd60e51b815260040180806020018281038252602a815260200180612732602a913960400191505060405180910390fd5b600082820183811015610b7a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60606107eb848460008585611e5e85611f64565b611eaf576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310611eed5780518252601f199092019160209182019101611ece565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611f4f576040519150601f19603f3d011682016040523d82523d6000602084013e611f54565b606091505b50915091506115a8828286611f6e565b803b15155b919050565b60608315611f7d575081610b7a565b825115611f8d5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fd7578181015183820152602001611fbf565b50505050905090810190601f1680156120045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b805161ffff81168114611f6957600080fd5b600060208284031215612035578081fd5b8135610b7a816126d5565b600060208284031215612051578081fd5b8151610b7a816126d5565b6000806040838503121561206e578081fd5b8235612079816126d5565b91506020830135612089816126d5565b809150509250929050565b6000806000606084860312156120a8578081fd5b83356120b3816126d5565b925060208401356120c3816126d5565b929592945050506040919091013590565b6000806000606084860312156120e8578283fd5b83356120f3816126d5565b925060208401359150604084013561210a816126d5565b809150509250925092565b6000806000806080858703121561212a578081fd5b8435612135816126d5565b935060208501359250604085013561214c816126d5565b9150606085013561215c816126d5565b939692955090935050565b600080600080600060a0868803121561217e578081fd5b8535612189816126d5565b94506020860135935060408601356121a0816126d5565b925060608601356121b0816126d5565b915060808601356121c0816126d5565b809150509295509295909350565b600080600080600060a086880312156121e5578081fd5b85356121f0816126d5565b9450602086013593506040860135612207816126d5565b92506060860135915060808601356121c0816126d5565b60008060008060808587031215612233578384fd5b843561223e816126d5565b93506020850135925060408501356002811061214c578283fd5b600080600080600080600060e0888a031215612272578485fd5b875161227d816126d5565b8097505060208801518060020b8114612294578586fd5b95506122a260408901612012565b94506122b060608901612012565b93506122be60808901612012565b925060a088015160ff811681146122d3578283fd5b60c089015190925080151581146122e8578182fd5b8091505092959891949750929550565b600060208284031215612309578081fd5b5051919050565b6001600160a01b03169052565b6bffffffffffffffffffffffff19606096871b811682527fffffff000000000000000000000000000000000000000000000000000000000060e896871b8116601484015294871b811660178301529290941b909216602b840152921b909116602e82015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b039586168152938516602085015262ffffff9290921660408401526060830152909116608082015260a00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039586168152602081019490945291841660408401526060830152909116608082015260a00190565b901515815260200190565b6020808252600a908201527f6e6f206465706f73697400000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f6e6f206465706f736974416d6f756e7400000000000000000000000000000000604082015260600190565b6020808252600d908201527f6e6f2073706c697441746f424300000000000000000000000000000000000000604082015260600190565b6020808252600f908201527f6e6f20636f6d62696e654142746f430000000000000000000000000000000000604082015260600190565b6020808252600b908201527f6e6f207769746864726177000000000000000000000000000000000000000000604082015260600190565b60208082526019908201527f7377617020696e73756666696369656e742062616c616e636500000000000000604082015260600190565b60006020808352835160a08285015280518060c0860152835b818110156125e55782810184015186820160e0015283016125c9565b818111156125f6578460e083880101525b5091850151916126096040860184612310565b6040860151606086015260608601516080860152608086015160a086015260e0601f19601f830116860101935050505092915050565b6000610100820190506001600160a01b0380845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b62ffffff91909116815260200190565b90815260200190565b918252602082015260400190565b6001600160a01b038116811461103f57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a164736f6c6343000706000a
0x60e06040523480156200001157600080fd5b50604051620028f5380380620028f58339810160408190526200003491620000d7565b6000805462ffffff909216600160a01b0262ffffff60a01b196001600160a01b03199093163317929092169190911790557fe592427a0aece92de3edee1f18e0157c058615640000000000000000000000006080527fb27308f9f90d607463bb33ea1bebb41c27ce5ab600000000000000000000000060a0527f1f98431c8ad98523631ae4a59f267346ea31f98400000000000000000000000060c05262000103565b600060208284031215620000e9578081fd5b815162ffffff81168114620000fc578182fd5b9392505050565b60805160601c60a05160601c60c05160601c61279e6200015760003980610d8252806115c8525080610bf35280610da652508061059652806106115280610b9e5280610e815280610f0b525061279e6000f3fe6080604052600436106101755760003560e01c8063c03ebe50116100cb578063f2fde38b1161007f578063f64dd29f11610059578063f64dd29f146103b4578063ff9c8ac6146103d4578063ffded98d146103f457610175565b8063f2fde38b1461036a578063f45346dc1461038c578063f4bf3db31461039f57610175565b8063c6bbd5a7116100b0578063c6bbd5a714610320578063ddca3f4314610335578063e9ccf7a61461035757610175565b8063c03ebe50146102f8578063c45a01551461030b57610175565b806369328dec1161012d5780638f32d59b116101075780638f32d59b146102965780639f0f0307146102b8578063ac41865a146102d857610175565b806369328dec146102315780638a12a79f1461025f5780638da5cb5b1461028157610175565b80632d92b0301161015e5780632d92b030146101d157806350f62da7146101f157806353b609b51461021157610175565b8063080cb01e1461017a578063269528ab146101b0575b600080fd5b34801561018657600080fd5b5061019a610195366004612115565b610414565b6040516101a791906126be565b60405180910390f35b6101c36101be366004612167565b6107f3565b6040516101a79291906126c7565b3480156101dd57600080fd5b5061019a6101ec36600461221e565b61080e565b3480156101fd57600080fd5b5061019a61020c366004612024565b610a0f565b34801561021d57600080fd5b5061019a61022c366004612094565b610a29565b34801561023d57600080fd5b5061025161024c3660046120d4565b610b81565b6040516101a7929190612412565b34801561026b57600080fd5b50610274610b9c565b6040516101a79190612387565b34801561028d57600080fd5b50610274610bc0565b3480156102a257600080fd5b506102ab610bcf565b6040516101a7919061245b565b3480156102c457600080fd5b5061019a6102d33660046120d4565b610be0565b3480156102e457600080fd5b5061019a6102f336600461205c565b610c95565b6102516103063660046121ce565b610d65565b34801561031757600080fd5b50610274610d80565b34801561032c57600080fd5b50610274610da4565b34801561034157600080fd5b5061034a610dc8565b6040516101a791906126ae565b61019a610365366004612115565b610dda565b34801561037657600080fd5b5061038a610385366004612024565b610fdd565b005b61025161039a3660046120d4565b611042565b3480156103ab57600080fd5b5061027461105d565b3480156103c057600080fd5b5061019a6103cf3660046120d4565b61106c565b3480156103e057600080fd5b5061019a6103ef3660046120d4565b611151565b34801561040057600080fd5b5061038a61040f366004612024565b611272565b600080826001600160a01b031663e78cea926040518163ffffffff1660e01b815260040160206040518083038186803b15801561045057600080fd5b505afa158015610464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104889190612040565b6001549091506000906001600160a01b031615806104b357506001546001600160a01b038381169116145b806104cb57506001546001600160a01b038881169116145b156104e6576104dc87878488610dda565b60010190506106f1565b6040516370a0823160e01b81526000906001600160a01b038916906370a0823190610515903090600401612387565b60206040518083038186803b15801561052d57600080fd5b505afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056591906122f8565b9050868110156105905760405162461bcd60e51b815260040161058790612579565b60405180910390fd5b6105bb887f0000000000000000000000000000000000000000000000000000000000000000836112fa565b60006040518060a001604052806105e88b600160009054906101000a90046001600160a01b0316886113c0565b8152602001886001600160a01b03168152602001428152602001838152602001600081525090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c04b8d59826040518263ffffffff1660e01b815260040161065b91906125b0565b602060405180830381600087803b15801561067557600080fd5b505af1158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad91906122f8565b92507f68936c305aa3d7463115da1f248800ec32837d788e516d7c667cf8b6bffc6263898386868b6040516106e695949392919061242b565b60405180910390a150505b6000846001600160a01b031663c8a4271f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561072c57600080fd5b505afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107649190612040565b60405163c7bf8cf560e01b81529091506001600160a01b0382169063c7bf8cf5906107959086908690600401612412565b60206040518083038186803b1580156107ad57600080fd5b505afa1580156107c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e591906122f8565b93505050505b949350505050565b60008060405162461bcd60e51b8152600401610587906124d4565b60008361081d575060006107eb565b6000826001600160a01b031663c8a4271f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561085857600080fd5b505afa15801561086c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108909190612040565b90506000836001600160a01b031663e78cea926040518163ffffffff1660e01b815260040160206040518083038186803b1580156108cd57600080fd5b505afa1580156108e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109059190612040565b9050806001600160a01b0316876001600160a01b031614156109a85760405163c7bf8cf560e01b81526001600160a01b0383169063c7bf8cf59061094f9084908a90600401612412565b60206040518083038186803b15801561096757600080fd5b505afa15801561097b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099f91906122f8565b925050506107eb565b60018560018111156109b657fe5b14156109f457816001600160a01b031663c7bf8cf5826109d78a8a8661106c565b6040518363ffffffff1660e01b815260040161094f929190612412565b816001600160a01b031663c7bf8cf5826109d78a8a86611151565b600060405162461bcd60e51b81526004016105879061249d565b6001546000906001600160a01b03161580610a5157506001546001600160a01b038581169116145b80610a6957506001546001600160a01b038481169116145b15610ab7576000610a7a8585611402565b90506000610a8a82858789611491565b600054909150600160a01b900462ffffff16620f424090810390820281610aad57fe5b0492505050610b7a565b600154600090610ad0906001600160a01b031685611402565b600154909150600090610af1908390869088906001600160a01b0316611491565b600054909150600160a01b900462ffffff16620f424090810390820281610b1457fe5b6001549190049150600090610b339088906001600160a01b0316611402565b600154909150610b5090829084906001600160a01b03168a611491565b600054909250600160a01b900462ffffff16620f424090810390830281610b7357fe5b0493505050505b9392505050565b60008060405162461bcd60e51b815260040161058790612542565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6000805460405163f7729d4360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163f7729d4391610c439188918791600160a01b900462ffffff1690899088906004016123dd565b602060405180830381600087803b158015610c5d57600080fd5b505af1158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107eb91906122f8565b600080610ca284846115b5565b90506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610cdf57600080fd5b505afa158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190612258565b505050505050905060c0610d58670de0b6b3a7640000610d52846001600160a01b0316856001600160a01b031661166490919063ffffffff16565b90611664565b901c925050505b92915050565b60008060405162461bcd60e51b81526004016105879061250b565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600054600160a01b900462ffffff1681565b600080856001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610e099190612387565b60206040518083038186803b158015610e2157600080fd5b505afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5991906122f8565b905084811015610e7b5760405162461bcd60e51b815260040161058790612579565b610ea6867f0000000000000000000000000000000000000000000000000000000000000000836112fa565b60408051610100810182526001600160a01b038881168252868116602083015260008054600160a01b900462ffffff1683850152868216606084015242608084015260a0830185905260c0830181905260e0830152915163414bf38960e01b815290917f0000000000000000000000000000000000000000000000000000000000000000169063414bf38990610f4090849060040161263f565b602060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9291906122f8565b92507f68936c305aa3d7463115da1f248800ec32837d788e516d7c667cf8b6bffc62638783878688604051610fcb95949392919061242b565b60405180910390a15050949350505050565b610fe5610bcf565b611036576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61103f816116bd565b50565b60008060405162461bcd60e51b815260040161058790612466565b6001546001600160a01b031681565b6001546000906001600160a01b0316158061109457506001546001600160a01b038581169116145b806110ac57506001546001600160a01b038381169116145b156110d35760006110bd8584611402565b90506110cb81858786611491565b915050610b7a565b6001546000906110ed9086906001600160a01b0316611402565b60015490915060009061110e908390879089906001600160a01b0316611491565b60015490915060009061112a906001600160a01b031686611402565b60015490915061114790829084906001600160a01b031688611491565b9350505050610b7a565b600080548190620f424090600160a01b900462ffffff168502600154919004850391506001600160a01b0316158061119657506001546001600160a01b038681169116145b806111ae57506001546001600160a01b038481169116145b156111d65760006111bf8685611402565b90506111cd81838887611491565b92505050610b7a565b6001546000906111f09087906001600160a01b0316611402565b60015490915060009061121190839085908a906001600160a01b0316611491565b600054909150620f424090600160a01b900462ffffff1682026001549190048203935060009061124a906001600160a01b031687611402565b60015490915061126790829086906001600160a01b031689611491565b945050505050610b7a565b61127a610bcf565b6112cb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e9061132b903090879060040161239b565b60206040518083038186803b15801561134357600080fd5b505afa158015611357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137b91906122f8565b90508061139d576113986001600160a01b03851684600019611731565b6113ba565b818110156113ba576113ba6001600160a01b03851684831961185e565b50505050565b6000546040516060916113ea918691600160a01b900462ffffff169086908290879060200161231d565b60405160208183030381529060405290509392505050565b60008061140f84846115b5565b9050806001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561144a57600080fd5b505afa15801561145e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114829190612258565b50939998505050505050505050565b60008061149d8661195e565b90506fffffffffffffffffffffffffffffffff6001600160a01b03821611611527576001600160a01b03808216800290848116908616106114fe576114f9600160c01b876fffffffffffffffffffffffffffffffff1683611c90565b61151f565b61151f81876fffffffffffffffffffffffffffffffff16600160c01b611c90565b9250506115ac565b60006115466001600160a01b0383168068010000000000000000611c90565b9050836001600160a01b0316856001600160a01b03161061158757611582600160801b876fffffffffffffffffffffffffffffffff1683611c90565b6115a8565b6115a881876fffffffffffffffffffffffffffffffff16600160801b611c90565b9250505b50949350505050565b60008054604051630b4c774160e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691631698ee82916116149187918791600160a01b900462ffffff16906004016123b5565b60206040518083038186803b15801561162c57600080fd5b505afa158015611640573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190612040565b60008261167357506000610d5f565b8282028284828161168057fe5b0414610b7a5760405162461bcd60e51b81526004018080602001828103825260218152602001806127116021913960400191505060405180910390fd5b6001600160a01b0381166117025760405162461bcd60e51b81526004018080602001828103825260268152602001806126eb6026913960400191505060405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b8015806117b7575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561178957600080fd5b505afa15801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b5051155b6117f25760405162461bcd60e51b815260040180806020018281038252603681526020018061275c6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b179052611859908490611d3f565b505050565b60006118f482856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156118c257600080fd5b505afa1580156118d6573d6000803e3d6000fd5b505050506040513d60208110156118ec57600080fd5b505190611df0565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663095ea7b360e01b1790529091506113ba908590611d3f565b60008060008360020b12611975578260020b61197d565b8260020b6000035b9050620d89e88111156119bb576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b6000600182166119cf57600160801b6119e1565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611a15576ffff97272373d413259a46990580e213a0260801c5b6004821615611a34576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611a53576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611a72576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611a91576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611ab0576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611acf576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611aef576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611b0f576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611b2f576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611b4f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611b6f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611b8f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611baf576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611bcf576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611bf0576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611c10576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611c2f576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611c4c576b048a170391f7dc42444e8fa20260801c5b60008460020b1315611c67578060001981611c6357fe5b0490505b640100000000810615611c7b576001611c7e565b60005b60ff16602082901c0192505050919050565b6000808060001985870986860292508281109083900303905080611cc65760008411611cbb57600080fd5b508290049050610b7a565b808411611cd257600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000611d94826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e4a9092919063ffffffff16565b80519091501561185957808060200190516020811015611db357600080fd5b50516118595760405162461bcd60e51b815260040180806020018281038252602a815260200180612732602a913960400191505060405180910390fd5b600082820183811015610b7a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60606107eb848460008585611e5e85611f64565b611eaf576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310611eed5780518252601f199092019160209182019101611ece565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611f4f576040519150601f19603f3d011682016040523d82523d6000602084013e611f54565b606091505b50915091506115a8828286611f6e565b803b15155b919050565b60608315611f7d575081610b7a565b825115611f8d5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fd7578181015183820152602001611fbf565b50505050905090810190601f1680156120045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b805161ffff81168114611f6957600080fd5b600060208284031215612035578081fd5b8135610b7a816126d5565b600060208284031215612051578081fd5b8151610b7a816126d5565b6000806040838503121561206e578081fd5b8235612079816126d5565b91506020830135612089816126d5565b809150509250929050565b6000806000606084860312156120a8578081fd5b83356120b3816126d5565b925060208401356120c3816126d5565b929592945050506040919091013590565b6000806000606084860312156120e8578283fd5b83356120f3816126d5565b925060208401359150604084013561210a816126d5565b809150509250925092565b6000806000806080858703121561212a578081fd5b8435612135816126d5565b935060208501359250604085013561214c816126d5565b9150606085013561215c816126d5565b939692955090935050565b600080600080600060a0868803121561217e578081fd5b8535612189816126d5565b94506020860135935060408601356121a0816126d5565b925060608601356121b0816126d5565b915060808601356121c0816126d5565b809150509295509295909350565b600080600080600060a086880312156121e5578081fd5b85356121f0816126d5565b9450602086013593506040860135612207816126d5565b92506060860135915060808601356121c0816126d5565b60008060008060808587031215612233578384fd5b843561223e816126d5565b93506020850135925060408501356002811061214c578283fd5b600080600080600080600060e0888a031215612272578485fd5b875161227d816126d5565b8097505060208801518060020b8114612294578586fd5b95506122a260408901612012565b94506122b060608901612012565b93506122be60808901612012565b925060a088015160ff811681146122d3578283fd5b60c089015190925080151581146122e8578182fd5b8091505092959891949750929550565b600060208284031215612309578081fd5b5051919050565b6001600160a01b03169052565b6bffffffffffffffffffffffff19606096871b811682527fffffff000000000000000000000000000000000000000000000000000000000060e896871b8116601484015294871b811660178301529290941b909216602b840152921b909116602e82015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b039586168152938516602085015262ffffff9290921660408401526060830152909116608082015260a00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039586168152602081019490945291841660408401526060830152909116608082015260a00190565b901515815260200190565b6020808252600a908201527f6e6f206465706f73697400000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f6e6f206465706f736974416d6f756e7400000000000000000000000000000000604082015260600190565b6020808252600d908201527f6e6f2073706c697441746f424300000000000000000000000000000000000000604082015260600190565b6020808252600f908201527f6e6f20636f6d62696e654142746f430000000000000000000000000000000000604082015260600190565b6020808252600b908201527f6e6f207769746864726177000000000000000000000000000000000000000000604082015260600190565b60208082526019908201527f7377617020696e73756666696369656e742062616c616e636500000000000000604082015260600190565b60006020808352835160a08285015280518060c0860152835b818110156125e55782810184015186820160e0015283016125c9565b818111156125f6578460e083880101525b5091850151916126096040860184612310565b6040860151606086015260608601516080860152608086015160a086015260e0601f19601f830116860101935050505092915050565b6000610100820190506001600160a01b0380845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b62ffffff91909116815260200190565b90815260200190565b918252602082015260400190565b6001600160a01b038116811461103f57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a164736f6c6343000706000a0000000000000000000000000000000000000000000000000000000000000bb8