0x6080604052600436106100c65760003560e01c80637a0ed6271161007f578063914237651161005957806391423765146102a3578063adfca15e146102c3578063cdffacc6146102f0578063f2fde38b14610310576100cd565b80637a0ed627146102575780638ab5150a146102795780638da5cb5b1461028e576100cd565b806301ffc9a71461016a57806306fdde031461019f5780631f931c1c146101d35780632c408059146101f357806352ef6b2c1461022057806379ba509714610242576100cd565b366100cd57005b60006100d7610330565b90506001600160a01b0381163b6101445760405162461bcd60e51b815260206004820152602660248201527f50726f78793a20696d706c656d656e746174696f6e206d75737420626520636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610163573d6000f35b3d6000fd5b005b34801561017657600080fd5b5061018a6101853660046118ff565b6103f9565b60405190151581526020015b60405180910390f35b3480156101ab57600080fd5b506040805180820182526005815264424954434960d81b60208201529051610196919061196a565b3480156101df57600080fd5b506101686101ee3660046119dd565b61042e565b3480156101ff57600080fd5b506102086104bb565b6040516001600160a01b039091168152602001610196565b34801561022c57600080fd5b506102356104d7565b6040516101969190611a8f565b34801561024e57600080fd5b5061016861067a565b34801561026357600080fd5b5061026c6106fe565b6040516101969190611b21565b34801561028557600080fd5b50610208610b26565b34801561029a57600080fd5b50610208610b35565b3480156102af57600080fd5b506101686102be366004611b9e565b610b3f565b3480156102cf57600080fd5b506102e36102de366004611b9e565b610b9c565b6040516101969190611bb9565b3480156102fc57600080fd5b5061020861030b3660046118ff565b610ce8565b34801561031c57600080fd5b5061016861032b366004611b9e565b610d15565b600080356001600160e01b03191681527f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9360208190526040822054819060601c806103ec575060038201546001600160a01b0316806103ec5760405162461bcd60e51b815260206004820152603260248201527f4469616d6f6e64426173653a206e6f20666163657420666f756e6420666f722060448201527166756e6374696f6e207369676e617475726560701b606482015260840161013b565b9392505050565b3b151590565b600061042882610407610d51565b906001600160e01b0319166000908152602091909152604090205460ff1690565b92915050565b610436610ffd565b546001600160a01b0316331461045e5760405162461bcd60e51b815260040161013b90611bfb565b6104b461046b8587611cc6565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104ac9250610dfd915050565b929190610e21565b5050505050565b60006104c5610dfd565b600301546001600160a01b0316919050565b606060006104e3610dfd565b600181015490915061ffff1667ffffffffffffffff81111561050757610507611c32565b604051908082528060200260200182016040528015610530578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610672576000818152600285016020526040812054905b600881101561065d578361056f81611e10565b600188015490955061ffff168511905061065d57600581901b82901b6001600160e01b0319811660009081526020889052604081205460601c90805b88811015610600578a81815181106105c5576105c5611e29565b60200260200101516001600160a01b0316836001600160a01b0316036105ee5760019150610600565b806105f881611e10565b9150506105ab565b50801561060f5750505061064b565b818a898151811061062257610622611e29565b6001600160a01b03909216602092830291909101909101528761064481611e10565b9850505050505b8061065581611e10565b91505061055c565b5050808061066a90611e10565b915050610539565b505082525090565b610682611681565b6001600160a01b0316336001600160a01b0316146106f45760405162461bcd60e51b815260206004820152602960248201527f536166654f776e61626c653a2073656e646572206d757374206265206e6f6d696044820152683732b29037bbb732b960b91b606482015260840161013b565b6106fc6116b4565b565b6060600061070a610dfd565b600181015490915061ffff1667ffffffffffffffff81111561072e5761072e611c32565b60405190808252806020026020018201604052801561077457816020015b60408051808201909152600081526060602082015281526020019060019003908161074c5790505b50600182015490925060009061ffff1667ffffffffffffffff81111561079c5761079c611c32565b6040519080825280602002602001820160405280156107c5578160200160208202803683370190505b50905060008060005b600185015461ffff16821015610ab4576000818152600286016020526040812054905b6008811015610a9f578361080481611e10565b600189015490955061ffff1685119050610a9f57600581901b82901b6001600160e01b0319811660009081526020899052604081205460601c90805b8881101561095d57826001600160a01b03168c828151811061086457610864611e29565b6020026020010151600001516001600160a01b03160361094b57838c828151811061089157610891611e29565b6020026020010151602001518b83815181106108af576108af611e29565b602002602001015160ff16815181106108ca576108ca611e29565b60200260200101906001600160e01b03191690816001600160e01b0319168152505060ff8a828151811061090057610900611e29565b602002602001015160ff161061091557600080fd5b89818151811061092757610927611e29565b60200260200101805180919061093c90611e3f565b60ff169052506001915061095d565b8061095581611e10565b915050610840565b50801561096c57505050610a8d565b818b898151811061097f5761097f611e29565b60209081029190910101516001600160a01b03909116905260018a015461ffff1667ffffffffffffffff8111156109b8576109b8611c32565b6040519080825280602002602001820160405280156109e1578160200160208202803683370190505b508b89815181106109f4576109f4611e29565b602002602001015160200181905250828b8981518110610a1657610a16611e29565b602002602001015160200151600081518110610a3457610a34611e29565b60200260200101906001600160e01b03191690816001600160e01b031916815250506001898981518110610a6a57610a6a611e29565b60ff9092166020928302919091019091015287610a8681611e10565b9850505050505b80610a9781611e10565b9150506107f1565b50508080610aac90611e10565b9150506107ce565b5060005b82811015610b1b576000848281518110610ad457610ad4611e29565b602002602001015160ff1690506000878381518110610af557610af5611e29565b602002602001015160200151905081815250508080610b1390611e10565b915050610ab8565b508185525050505090565b6000610b30611681565b905090565b6000610b30611731565b610b47610ffd565b546001600160a01b03163314610b6f5760405162461bcd60e51b815260040161013b90611bfb565b80610b78610dfd565b60030180546001600160a01b0319166001600160a01b039290921691909117905550565b60606000610ba8610dfd565b600181015490915061ffff1667ffffffffffffffff811115610bcc57610bcc611c32565b604051908082528060200260200182016040528015610bf5578160200160208202803683370190505b50915060008060005b600184015461ffff16821015610cde576000818152600285016020526040812054905b6008811015610cc95783610c3481611e10565b600188015490955061ffff1685119050610cc957600581901b82901b6001600160e01b0319811660009081526020889052604090205460601c6001600160a01b038a1603610cb65780888781518110610c8f57610c8f611e29565b6001600160e01b03199092166020928302919091019091015285610cb281611e10565b9650505b5080610cc181611e10565b915050610c21565b50508080610cd690611e10565b915050610bfe565b5050825250919050565b6000610cf2610dfd565b6001600160e01b0319909216600090815260209290925250604090205460601c90565b610d1d610ffd565b546001600160a01b03163314610d455760405162461bcd60e51b815260040161013b90611bfb565b610d4e8161173b565b50565b7f326d0c59a7612f6a9919e2a8ee333c80ba689d8ba2634de89c85cbb04832e70590565b6001600160e01b03198083169003610dcf5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640161013b565b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b7f177481ac65e4292921c69f62d1cc7f57541261e5d61c8175cf4e36a01c9bfc9390565b600184015461ffff811690819060009060071615610e515750600381901c60009081526002870160205260409020545b60005b8651811015610f71576000878281518110610e7157610e71611e29565b60200260200101519050600081602001519050600082604001515111610ee55760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a206e6f2073656c6563746f7273207370656369666044820152621a595960ea1b606482015260840161013b565b6000816002811115610ef957610ef9611e5e565b03610f1457610f0a8a86868561103e565b9095509350610f67565b6001816002811115610f2857610f28611e5e565b03610f3c57610f378a836111f1565b610f67565b6002816002811115610f5057610f50611e5e565b03610f6757610f618a8686856113e9565b90955093505b5050600101610e54565b50828214610f8d5760018701805461ffff191661ffff84161790555b6007821615610faf57600382901c600090815260028801602052604090208190555b7f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673868686604051610fe293929190611e74565b60405180910390a1610ff48585611744565b50505050505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f67168046090565b81546001600160a01b0319166001600160a01b0391909116179055565b805160009081906001600160a01b0316301480611065575082516001600160a01b03163b15155b6110bd5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a204144442074617267657420686173206e6f20636044820152626f646560e81b606482015260840161013b565b60005b8360400151518110156111e4576000846040015182815181106110e5576110e5611e29565b6020908102919091018101516001600160e01b031981166000908152918a9052604090912054909150606081901c1561116c5760405162461bcd60e51b815260206004820152602360248201527f4469616d6f6e64426173653a2073656c6563746f7220616c726561647920616460448201526219195960ea1b606482015260840161013b565b85516001600160e01b0319838116600081815260208d90526040902060609390931b6001600160601b0319168b1790925560058a901b60e090811692831c91831c199990991617978190036111d557600389901c600090815260028b0160205260408120989098555b505050600195860195016110c0565b5093959294509192505050565b80516001600160a01b03163b6112595760405162461bcd60e51b815260206004820152602760248201527f4469616d6f6e64426173653a205245504c4143452074617267657420686173206044820152666e6f20636f646560c81b606482015260840161013b565b60005b8160400151518110156113e45760008260400151828151811061128157611281611e29565b6020908102919091018101516001600160e01b03198116600090815291869052604090912054909150606081901c806112fc5760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e6400604482015260640161013b565b306001600160a01b038216036113245760405162461bcd60e51b815260040161013b90611f3d565b84600001516001600160a01b0316816001600160a01b03160361139a5760405162461bcd60e51b815260206004820152602860248201527f4469616d6f6e64426173653a205245504c41434520746172676574206973206960448201526719195b9d1a58d85b60c21b606482015260840161013b565b5083516001600160e01b031992909216600090815260208690526040902060609290921b6001600160601b0319166bffffffffffffffffffffffff9190911617905560010161125c565b505050565b805160009081906001600160a01b03161561145e5760405162461bcd60e51b815260206004820152602f60248201527f4469616d6f6e64426173653a2052454d4f564520746172676574206d7573742060448201526e6265207a65726f206164647265737360881b606482015260840161013b565b600385901c6007861660005b85604001515181101561166d5760008660400151828151811061148f5761148f611e29565b6020908102919091018101516001600160e01b031981166000908152918c9052604090912054909150606081901c6115095760405162461bcd60e51b815260206004820152601f60248201527f4469616d6f6e64426173653a2073656c6563746f72206e6f7420666f756e6400604482015260640161013b565b30606082901c0361152c5760405162461bcd60e51b815260040161013b90611f3d565b600089900361155857600019909401600081815260028c01602052604090205498509360079350611560565b600019909301925b600584901b89901b6000806001600160e01b0319808416908616146115b7576001600160e01b03198316600090815260208f90526040902080546001600160601b0319166bffffffffffffffffffffffff86161790555b50506001600160e01b03198316600090815260208d90526040812055611fff600383901c1660e0600584901b1687821461161a57600082815260028f016020526040902080546001600160e01b031980841c19909116908516831c17905561163e565b80836001600160e01b031916901c816001600160e01b031960001b901c198d16179b505b8660000361165c57600088815260028f01602052604081208190559b505b50506001909301925061146a915050565b5060039190911b1796939550929350505050565b60007f24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce66178905b546001600160a01b0316919050565b60006116be610ffd565b805460405191925033916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36117048133611021565b610d4e60007f24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce66178905b90611021565b60006116a5610ffd565b610d4e816118b4565b8051156001600160a01b03831615146117b65760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e76616c696420696e697469616c697a617460448201526d696f6e20706172616d657465727360901b606482015260840161013b565b6001600160a01b038216156118b0576001600160a01b0382163014611843576001600160a01b0382163b6118435760405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e64426173653a20696e697469616c697a6174696f6e207461726760448201526d657420686173206e6f20636f646560901b606482015260840161013b565b6000826001600160a01b03168260405161185d9190611f7f565b600060405180830381855af49150503d8060008114611898576040519150601f19603f3d011682016040523d82523d6000602084013e61189d565b606091505b50509050806113e4573d6000803e3d6000fd5b5050565b610d4e81610d4e817f24aa1f7b31fd188a8d3ecfb06bc55c806040e59b03bd4396283442fce661789061172b565b80356001600160e01b0319811681146118fa57600080fd5b919050565b60006020828403121561191157600080fd5b6103ec826118e2565b60005b8381101561193557818101518382015260200161191d565b50506000910152565b6000815180845261195681602086016020860161191a565b601f01601f19169290920160200192915050565b6020815260006103ec602083018461193e565b80356001600160a01b03811681146118fa57600080fd5b60008083601f8401126119a657600080fd5b50813567ffffffffffffffff8111156119be57600080fd5b6020830191508360208285010111156119d657600080fd5b9250929050565b6000806000806000606086880312156119f557600080fd5b853567ffffffffffffffff80821115611a0d57600080fd5b818801915088601f830112611a2157600080fd5b813581811115611a3057600080fd5b8960208260051b8501011115611a4557600080fd5b60208301975080965050611a5b6020890161197d565b94506040880135915080821115611a7157600080fd5b50611a7e88828901611994565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b81811015611ad05783516001600160a01b031683529284019291840191600101611aab565b50909695505050505050565b600081518084526020808501945080840160005b83811015611b165781516001600160e01b03191687529582019590820190600101611af0565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611b9057888303603f19018552815180516001600160a01b03168452870151878401879052611b7d87850182611adc565b9588019593505090860190600101611b48565b509098975050505050505050565b600060208284031215611bb057600080fd5b6103ec8261197d565b6020808252825182820181905260009190848201906040850190845b81811015611ad05783516001600160e01b03191683529284019291840191600101611bd5565b6020808252601d908201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715611c6b57611c6b611c32565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611c9a57611c9a611c32565b604052919050565b600067ffffffffffffffff821115611cbc57611cbc611c32565b5060051b60200190565b6000611cd9611cd484611ca2565b611c71565b83815260208082019190600586811b860136811115611cf757600080fd5b865b81811015611ded57803567ffffffffffffffff80821115611d1a5760008081fd5b818a01915060608236031215611d305760008081fd5b611d38611c48565b611d418361197d565b81528683013560038110611d555760008081fd5b8188015260408381013583811115611d6d5760008081fd5b939093019236601f850112611d8457600092508283fd5b83359250611d94611cd484611ca2565b83815292871b84018801928881019036851115611db15760008081fd5b948901945b84861015611dd657611dc7866118e2565b82529489019490890190611db6565b918301919091525088525050948301948301611cf9565b5092979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611e2257611e22611dfa565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103611e5557611e55611dfa565b60010192915050565b634e487b7160e01b600052602160045260246000fd5b6000606080830181845280875180835260808601915060808160051b87010192506020808a016000805b84811015611f0d57898703607f19018652825180516001600160a01b031688528481015160038110611ede57634e487b7160e01b84526021600452602484fd5b88860152604090810151908801899052611efa89890182611adc565b9750509483019491830191600101611e9e565b5050506001600160a01b0389169087015250508381036040850152611f32818661193e565b979650505050505050565b60208082526022908201527f4469616d6f6e64426173653a2073656c6563746f7220697320696d6d757461626040820152616c6560f01b606082015260800190565b60008251611f9181846020870161191a565b919091019291505056fea2646970667358221220364c8f55747009b4de1f737a1895b796979a1f6288281275715aef165770311064736f6c63430008100033