0x6080604052348015600f57600080fd5b506016601a565b60d8565b600054610100900460ff161560855760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101560d6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b613e42806100e76000396000f3fe608060405234801561001057600080fd5b50600436106102255760003560e01c80637aed2b001161012a578063b7f08de4116100bd578063c4d66de81161008c578063d547741f11610071578063d547741f1461058d578063de251fb6146105a0578063f686f358146105b357600080fd5b8063c4d66de814610572578063d1058e591461058557600080fd5b8063b7f08de4146104b1578063b9d02df4146104c4578063ba62b8a714610534578063be95e01a1461055f57600080fd5b80639a3514f7116100f95780639a3514f7146104635780639e80aa14146104765780639f9a81c214610489578063a217fddf146104a957600080fd5b80637aed2b00146103f15780637b0472f01461040457806383b4918b1461041757806391d148541461042a57600080fd5b806327c81290116101bd57806336568abe1161018c578063379607f511610171578063379607f5146103b65780633e1a8906146103c9578063673a2a1f146103dc57600080fd5b806336568abe14610390578063372caeb8146103a357600080fd5b806327c812901461033157806329a2e8e6146103445780632f2ff15d146103575780633001973a1461036a57600080fd5b80630d1a0c3b116101f95780630d1a0c3b146102905780631526fe27146102985780631f8bc790146102e9578063248a9ca31461030e57600080fd5b8062b007791461022a57806301ffc9a71461023f578063060614cb14610267578063081e3eda14610288575b600080fd5b61023d610238366004613511565b6105c6565b005b61025261024d36600461352c565b6107f0565b60405190151581526020015b60405180910390f35b61027a61027536600461356e565b610889565b60405190815260200161025e565b609b5461027a565b6102526108c2565b6102ab6102a636600461356e565b6108ed565b604080519788526020880196909652948601939093526060850191909152608084015260a08301526001600160a01b031660c082015260e00161025e565b6102fc6102f736600461356e565b610945565b60405161025e969594939291906135d7565b61027a61031c36600461356e565b60009081526065602052604090206001015490565b61023d61033f366004613626565b610a6b565b610252610352366004613682565b610c86565b61023d610365366004613682565b610d1b565b61037d610378366004613682565b610d45565b60405161ffff909116815260200161025e565b61023d61039e366004613682565b610ee2565b6102526103b13660046136ae565b610f6e565b6102526103c436600461356e565b6110e6565b61023d6103d73660046136d0565b611150565b6103e4611705565b60405161025e9190613719565b61023d6103ff3660046137bd565b6117ad565b6102526104123660046136ae565b61185f565b61025261042536600461356e565b611910565b610252610438366004613682565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102526104713660046137f4565b611982565b61023d610484366004613830565b611b71565b61027a610497366004613511565b609a6020526000908152604090205481565b61027a600081565b61023d6104bf3660046138ff565b611e67565b61050c6104d2366004613682565b6099602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a00161025e565b609754610547906001600160a01b031681565b6040516001600160a01b03909116815260200161025e565b61027a61056d366004613682565b611f9d565b61023d610580366004613511565b6120ac565b6102526122df565b61023d61059b366004613682565b612310565b61027a6105ae366004613931565b612335565b61027a6105c136600461395d565b612352565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff166106495760405162461bcd60e51b815260206004820152600c60248201527f4f6e6c79206d616e61676572000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811661069f5760405162461bcd60e51b815260206004820152600c60248201527f5a65726f206164647265737300000000000000000000000000000000000000006044820152606401610640565b6097546001600160a01b03166106e357609780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b60005b609b548110156107b057609b818154811061070357610703613992565b60009182526020909120600790910201600601546097546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015610783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a791906139c1565b506001016106e6565b506040516001600160a01b03821681527f835b26155608bbce34d0ff7a98d9e1f28d6ccbd5a09da2bb8c68941586171ac29060200160405180910390a150565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061088357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061088361089f670de0b6b3a7640000612439565b6108bd6108ab85612439565b6108b86301e13380612449565b612461565b612499565b609b54600090815b818110156108e4576108db81611910565b506001016108ca565b50600191505090565b609b81815481106108fd57600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850154600586015460069096015494965092949193909291906001600160a01b031687565b609c818154811061095557600080fd5b60009182526020909120600390910201805460018201805460ff90921693509061097e906139de565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa906139de565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b505050600290930154919250506001600160a01b0381169061ffff740100000000000000000000000000000000000000008204811691760100000000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041686565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16610ae95760405162461bcd60e51b815260206004820152600c60248201527f4f6e6c79206d616e6167657200000000000000000000000000000000000000006044820152606401610640565b609b548710610b3a5760405162461bcd60e51b815260206004820152600a60248201527f496e76616c6964204964000000000000000000000000000000000000000000006044820152606401610640565b85609b8881548110610b4e57610b4e613992565b90600052602060002090600702016000018190555084609b8881548110610b7757610b77613992565b90600052602060002090600702016001018190555083609b8881548110610ba057610ba0613992565b90600052602060002090600702016004018190555082609b8881548110610bc957610bc9613992565b90600052602060002090600702016005018190555081609a6000609b8a81548110610bf657610bf6613992565b60009182526020808320600792909202909101600601546001600160a01b031683528281019390935260409182019020929092558151898152908101889052908101869052606081018590526080810184905260a081018390527f3bac89db141330ca418181bc13d70a4c167d9554b822e540bd98ca199be8cbc29060c00160405180910390a150505050505050565b60008281526099602090815260408083206001600160a01b03851684529091528120609b805483919086908110610cbf57610cbf613992565b6000918252602090912060975460079092020191506001600160a01b03163303610cee57600192505050610883565b6001810154610d009062015180613a60565b8260030154610d0f9190613a77565b42101595945050505050565b600082815260656020526040902060010154610d36816124f7565b610d408383612504565b505050565b600080609c8481548110610d5b57610d5b613992565b60009182526020918290206040805160c08101909152600390920201805460ff16151582526001810180549293919291840191610d97906139de565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc3906139de565b8015610e105780601f10610de557610100808354040283529160200191610e10565b820191906000526020600020905b815481529060010190602001808311610df357829003601f168201915b5050509183525050600291909101546001600160a01b038116602083015261ffff7401000000000000000000000000000000000000000082048116604084015276010000000000000000000000000000000000000000000082048116606084015278010000000000000000000000000000000000000000000000009091041660809091015280519091508015610eab5750610eab8385611982565b8015610ec557506097546001600160a01b03848116911614155b15610ed65780606001519150610edb565b600a91505b5092915050565b6001600160a01b0381163314610f605760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610640565b610f6a82826125c4565b5050565b60008281526099602090815260408083203384529091528120609b805483919086908110610f9e57610f9e613992565b9060005260206000209060070201905083826000015410156110025760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f7567682066756e6473000000000000000000000000000000006044820152606401610640565b61100c8533610c86565b6110585760405162461bcd60e51b815260206004820152601260248201527f5374616b65207374696c6c206c6f636b656400000000000000000000000000006044820152606401610640565b6110628533612665565b8381600201546110729190613a8a565b60028201558154611084908590613a8a565b8255600681015461109f906001600160a01b03163386612812565b60408051858152426020820152869133917ffbd65cfd6de1493db337385c0712095397ecbd0504df64b861cdfceb80c7b422910160405180910390a3506001949350505050565b60006110f28233610c86565b61113e5760405162461bcd60e51b815260206004820152601360248201527f526577617264207374696c6c206c6f636b6564000000000000000000000000006044820152606401610640565b6111488233612665565b506001919050565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff166111ce5760405162461bcd60e51b815260206004820152600c60248201527f4f6e6c79206d616e6167657200000000000000000000000000000000000000006044820152606401610640565b42831161121d5760405162461bcd60e51b815260206004820152601060248201527f496e76616c696420656e642064617465000000000000000000000000000000006044820152606401610640565b6001600160a01b0381166112735760405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610640565b6040805160e0810182528681526020808201878152600083850181815242606080870191825260808088018c815260a0808a018d81526001600160a01b03808e1660c0808e01918252609b805460018181018355918d529e516007909f027fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34981019f909f559b517fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34a8f015598517fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34b8e015596517fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34c8d015592517fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34d8c0155517fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34e8b015593517fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34f9099018054999091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909916989098179097558751928301885283835287518087018952848152958301958652968201839052600a96820196909652938401819052938301849052609c8054918201815590935281516003939093027faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539c810180549415157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090951694909417845590519192917faf85b9071dfafeac1409d3f1d19bafc9bc7c37974cde8df0ee6168f0086e539d909101906114db9082613b14565b50604082810151600290920180546060850151608086015160a09096015161ffff9081167801000000000000000000000000000000000000000000000000027fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff97821676010000000000000000000000000000000000000000000002979097167fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff9190921674010000000000000000000000000000000000000000027fffffffffffffffffffff000000000000000000000000000000000000000000009093166001600160a01b03968716179290921791909116179390931790925582166000908152609a60205220600019905561161560016115f7609b5490565b6116019190613a8a565b6097546001600160a01b031660008061287e565b6097546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260001960248201529082169063095ea7b3906044016020604051808303816000875af1158015611682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a691906139c1565b506040805186815260208101869052908101849052606081018390526001600160a01b03821660808201527f23d4f2e401039129c4e716af88b155de6b715b637b2844ef6a2682129fb5ef4a9060a00160405180910390a15050505050565b6060609b805480602002602001604051908101604052809291908181526020016000905b828210156117a45760008481526020908190206040805160e0810182526007860290920180548352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600601546001600160a01b031660c08301529083529092019101611729565b50505050905090565b60006117b8816124f7565b81156117ed576117e87f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0884610d1b565b611817565b6118177f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0884612310565b604080516001600160a01b038516815283151560208201527f4e0821e9e83e6ed2861d90c07a96114379e9c5b5e6ea2afec5ac6e49d745314c910160405180910390a1505050565b600080609b848154811061187557611875613992565b60009182526020918290206040805160e0810182526007909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a08201526006909101546001600160a01b031660c082018190529091506118ee81333087612a62565b6118f785611910565b50611905853386600061287e565b506001949350505050565b60008061191d8333611f9d565b905080156119795761192f8382612b19565b61193c833383600161287e565b60408051828152426020820152849133917f5a1f3c64a894cbcee558ea14f59dd807692703df44b42f0c036588f149c8f7ba910160405180910390a35b50600192915050565b600080609c838154811061199857611998613992565b60009182526020918290206040805160c08101909152600390920201805460ff161515825260018101805492939192918401916119d4906139de565b80601f0160208091040260200160405190810160405280929190818152602001828054611a00906139de565b8015611a4d5780601f10611a2257610100808354040283529160200191611a4d565b820191906000526020600020905b815481529060010190602001808311611a3057829003601f168201915b5050509183525050600291909101546001600160a01b038116602083015261ffff7401000000000000000000000000000000000000000082048116604080850191909152760100000000000000000000000000000000000000000000830482166060850152780100000000000000000000000000000000000000000000000090920416608090920191909152810151909150600090611aec9086612cb6565b905060005b8151811015611b6557826080015161ffff16828281518110611b1557611b15613992565b602002602001015110158015611b4c57508260a0015161ffff16828281518110611b4157611b41613992565b602002602001015111155b15611b5d5760019350505050610883565b600101611af1565b50600095945050505050565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16611bef5760405162461bcd60e51b815260206004820152600c60248201527f4f6e6c79206d616e6167657200000000000000000000000000000000000000006044820152606401610640565b600a8361ffff161015611c445760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964206d756c7469000000000000000000000000000000000000006044820152606401610640565b8061ffff168261ffff161115611c9c5760405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420696e646578000000000000000000000000000000000000006044820152606401610640565b6000609c8981548110611cb157611cb1613992565b60009182526020909120600390910201905060018101611cd2888a83613bd4565b5060028101546001600160a01b0316611d1b576002810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161790555b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515151781556002810180547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff878116919091027fffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff169190911776010000000000000000000000000000000000000000000086831602177fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000918516919091021790556040517fae2d529af1a01f330586236337ea9f19d1725f4196479f87c45703a7e092779d90611e54908b908b908b908b908b908b908b908b90613c95565b60405180910390a1505050505050505050565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16611ee55760405162461bcd60e51b815260206004820152600c60248201527f4f6e6c79206d616e6167657200000000000000000000000000000000000000006044820152606401610640565b609880547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000000060ff85169081027fffffffffffffffffffffffff000000000000000000000000000000000000000016919091176001600160a01b0384169081179092556040805191825260208201929092527f4b04c673d085bf81226ccfbf62e8ba9964658e4fa23e4628515bbfb6961edcfb91015b60405180910390a15050565b60008281526099602090815260408083206001600160a01b03851684529091528120609b805483919086908110611fd657611fd6613992565b9060005260206000209060070201905060008260030154836002015411612001578260030154612007565b82600201545b905060008260040154421161201c5742612022565b82600401545b905060006120308888610d45565b61ffff1690508183101561208a5760006120686103e88660000154670de0b6b3a764000061205e9190613a60565b6102759190613d2d565b865490915061207c81836105ae8888613a8a565b6120869190613a8a565b9650505b600a6120968288613a60565b6120a09190613d2d565b98975050505050505050565b600054610100900460ff16158080156120cc5750600054600160ff909116105b806120e65750303b1580156120e6575060005460ff166001145b6121585760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610640565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121b657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6121be612e4f565b6121c9600083612ece565b6121f37f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0883612ece565b61221d7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0833612ece565b609880547fffffffffffffffffffffff00000000000000000000000000000000000000000016337fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1617740500000000000000000000000000000000000000001790558015610f6a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611f91565b609b54600090815b818110156108e4576122f98133610c86565b15612308576123088133612665565b6001016122e7565b60008281526065602052604090206001015461232b816124f7565b610d4083836125c4565b600061234a846123458585612ed8565b612f51565b949350505050565b6097546000906001600160a01b031633146123af5760405162461bcd60e51b815260206004820152600f60248201527f4f6e6c7920636f6d706f756e64657200000000000000000000000000000000006044820152606401610640565b60006123bb8585610d45565b9050600083600a6123d061ffff851683613a60565b6123da9190613d2d565b6123e49190613a8a565b90508015612430576123f68682612b19565b612430609b878154811061240c5761240c613992565b60009182526020909120600660079092020101546001600160a01b03168683612812565b95945050505050565b600061088382633b9aca00612f84565b6000610883826b033b2e3c9fd0803ce8000000612f84565b60008161248861247d856b033b2e3c9fd0803ce8000000612f84565b6108bd600286613d2d565b6124929190613d2d565b9392505050565b6000826124a68382613a77565b91508110156108835760405162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f770000000000000000000000006044820152606401610640565b6125018133612ff4565b50565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610f6a5760008281526065602090815260408083206001600160a01b0385168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556125803390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615610f6a5760008281526065602090815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008281526099602090815260408083206001600160a01b03851684529091528120609b80549192918590811061269e5761269e613992565b600091825260208083206040805160e0810182526007909402909101805484526001810154928401929092526002820154908301526003810154606083015260048101546080830152600581015460a0830152600601546001600160a01b031660c0820152915061270f8585611f9d565b905080156127c6576127218582612b19565b8083600101546127319190613a77565b60018401556098546000906103e8906127659074010000000000000000000000000000000000000000900460ff1684613a60565b61276f9190613d2d565b905061277b8183613a8a565b4260028601556004850154909250612794908390613a77565b600485015560c08301516098546127b591906001600160a01b031683612812565b6127c48360c001518684612812565b505b6040805182815242602082015286916001600160a01b038716917f45c072aa05b9853b5a993de7a28bc332ee01404a628cec1a23ce0f659f842ef1910160405180910390a35050505050565b6001600160a01b0383166000908152609a60205260409020548390825b8181111561285c5761284b6001600160a01b0384168684613069565b6128558282613a8a565b905061282f565b8015612876576128766001600160a01b0384168683613069565b505050505050565b60008481526099602090815260408083206001600160a01b03871684529091528120609b8054919291879081106128b7576128b7613992565b906000526020600020906007020190508215806128e257506097546001600160a01b03868116911614155b156129dd574260038301556097546001600160a01b038681169116146129dd5780600501548482600201546129179190613a77565b11156129655760405162461bcd60e51b815260206004820152600960248201527f506f6f6c2066756c6c00000000000000000000000000000000000000000000006044820152606401610640565b600081600101546201518061297a9190613a60565b82600401546129899190613a8a565b9050804211156129db5760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e672064697361626c656420666f72207468697320706f6f6c00006044820152606401610640565b505b81546129ea908590613a77565b825560028101546129fc908590613a77565b816002018190555042826002018190555085856001600160a01b03167ff556991011e831bcfac4f406d547e5e32cdd98267efab83935230d5f8d02c4468642604051612a52929190918252602082015260400190565b60405180910390a3505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052612b139085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526130b2565b50505050565b6000609b8381548110612b2e57612b2e613992565b60009182526020822060079190910201600601546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116925082906370a0823190602401602060405180830381865afa158015612ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc79190613d41565b9050600080612bd5609b5490565b905060005b81811015612c5c57846001600160a01b0316609b8281548110612bff57612bff613992565b60009182526020909120600660079092020101546001600160a01b031603612c5457609b8181548110612c3457612c34613992565b90600052602060002090600702016002015483612c519190613a77565b92505b600101612bda565b5084612c688385613a8a565b10156128765760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f756768207265776172647300000000000000000000000000006044820152606401610640565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301526060918491600091908316906370a0823190602401602060405180830381865afa158015612d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d429190613d41565b905060008167ffffffffffffffff811115612d5f57612d5f613a9d565b604051908082528060200260200182016040528015612d88578160200160208202803683370190505b50905060005b82811015612e45576040517f2f745c590000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015260248201839052851690632f745c5990604401602060405180830381865afa158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190613d41565b828281518110612e3257612e32613992565b6020908102919091010152600101612d8e565b5095945050505050565b600054610100900460ff16612ecc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610640565b565b610f6a8282612504565b6000612ee5600283613d5a565b600003612efe576b033b2e3c9fd0803ce8000000612f00565b825b9050612f0d600283613d2d565b91505b811561088357612f208384612f51565b9250612f2d600283613d5a565b15612f3f57612f3c8184612f51565b90505b612f4a600283613d2d565b9150612f10565b60006b033b2e3c9fd0803ce8000000612488612f6d8585612f84565b6108bd60026b033b2e3c9fd0803ce8000000613d2d565b6000811580612fa857508282612f9a8183613a60565b9250612fa69083613d2d565b145b6108835760405162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f770000000000000000000000006044820152606401610640565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610f6a5761302781613197565b6130328360206131a9565b604051602001613043929190613d6e565b60408051601f198184030181529082905262461bcd60e51b825261064091600401613def565b6040516001600160a01b038316602482015260448101829052610d409084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612aaf565b6000613107826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166133d29092919063ffffffff16565b805190915015610d40578080602001905181019061312591906139c1565b610d405760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610640565b60606108836001600160a01b03831660145b606060006131b8836002613a60565b6131c3906002613a77565b67ffffffffffffffff8111156131db576131db613a9d565b6040519080825280601f01601f191660200182016040528015613205576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061323c5761323c613992565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061329f5761329f613992565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006132db846002613a60565b6132e6906001613a77565b90505b6001811115613383577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061332757613327613992565b1a60f81b82828151811061333d5761333d613992565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361337c81613e02565b90506132e9565b5083156124925760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610640565b606061234a848460008585600080866001600160a01b031685876040516133f99190613e19565b60006040518083038185875af1925050503d8060008114613436576040519150601f19603f3d011682016040523d82523d6000602084013e61343b565b606091505b509150915061344c87838387613457565b979650505050505050565b606083156134c65782516000036134bf576001600160a01b0385163b6134bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610640565b508161234a565b61234a83838151156134db5781518083602001fd5b8060405162461bcd60e51b81526004016106409190613def565b80356001600160a01b038116811461350c57600080fd5b919050565b60006020828403121561352357600080fd5b612492826134f5565b60006020828403121561353e57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461249257600080fd5b60006020828403121561358057600080fd5b5035919050565b60005b838110156135a257818101518382015260200161358a565b50506000910152565b600081518084526135c3816020860160208601613587565b601f01601f19169290920160200192915050565b861515815260c0602082015260006135f260c08301886135ab565b6001600160a01b039690961660408301525061ffff9384166060820152918316608083015290911660a09091015292915050565b600080600080600080600060e0888a03121561364157600080fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915061367460c089016134f5565b905092959891949750929550565b6000806040838503121561369557600080fd5b823591506136a5602084016134f5565b90509250929050565b600080604083850312156136c157600080fd5b50508035926020909101359150565b600080600080600060a086880312156136e857600080fd5b8535945060208601359350604086013592506060860135915061370d608087016134f5565b90509295509295909350565b602080825282518282018190526000919060409081850190868401855b828110156137975781518051855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0908101516001600160a01b03169085015260e09093019290850190600101613736565b5091979650505050505050565b801515811461250157600080fd5b803561350c816137a4565b600080604083850312156137d057600080fd5b6137d9836134f5565b915060208301356137e9816137a4565b809150509250929050565b6000806040838503121561380757600080fd5b613810836134f5565b946020939093013593505050565b803561ffff8116811461350c57600080fd5b60008060008060008060008060e0898b03121561384c57600080fd5b88359750602089013567ffffffffffffffff8082111561386b57600080fd5b818b0191508b601f83011261387f57600080fd5b81358181111561388e57600080fd5b8c60208285010111156138a057600080fd5b6020830199508098505050506138b860408a016134f5565b94506138c660608a016137b2565b93506138d460808a0161381e565b92506138e260a08a0161381e565b91506138f060c08a0161381e565b90509295985092959890939650565b6000806040838503121561391257600080fd5b823560ff8116811461392357600080fd5b91506136a5602084016134f5565b60008060006060848603121561394657600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561397257600080fd5b83359250613982602085016134f5565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156139d357600080fd5b8151612492816137a4565b600181811c908216806139f257607f821691505b602082108103613a2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761088357610883613a31565b8082018082111561088357610883613a31565b8181038181111561088357610883613a31565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610d40576000816000526020600020601f850160051c81016020861015613af55750805b601f850160051c820191505b8181101561287657828155600101613b01565b815167ffffffffffffffff811115613b2e57613b2e613a9d565b613b4281613b3c84546139de565b84613acc565b602080601f831160018114613b775760008415613b5f5750858301515b600019600386901b1c1916600185901b178555612876565b600085815260208120601f198616915b82811015613ba657888601518255948401946001909101908401613b87565b5085821015613bc45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831115613bec57613bec613a9d565b613c0083613bfa83546139de565b83613acc565b6000601f841160018114613c345760008515613c1c5750838201355b600019600387901b1c1916600186901b178355613c8e565b600083815260209020601f19861690835b82811015613c655786850135825560209485019460019092019101613c45565b5086821015613c825760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b88815260e060208201528660e08201526000610100888a828501376000838a018201526001600160a01b0397909716604083015250931515606085015261ffff928316608085015290821660a08401521660c0820152601f909201601f19169091010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613d3c57613d3c613cfe565b500490565b600060208284031215613d5357600080fd5b5051919050565b600082613d6957613d69613cfe565b500690565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613da6816017850160208801613587565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613de3816028840160208801613587565b01602801949350505050565b60208152600061249260208301846135ab565b600081613e1157613e11613a31565b506000190190565b60008251613e2b818460208701613587565b919091019291505056fea164736f6c6343000819000a