60806040526009805465ffffffffffff60a01b191664081903051960a81b179055600d805460ff191660011790553480156200003a57600080fd5b5060405162003c4738038062003c478339810160408190526200005d91620007c6565b3360405180604001604052806008815260200167222720aa37b5b2b760c11b81525060405180604001604052806003815260200162444e4160e81b8152508160039081620000ac91906200089c565b506004620000bb82826200089c565b5050506001600160a01b038116620000ee57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000f9816200040d565b506200011f3362000119620001116012600a62000a7b565b85906200045f565b620004a4565b600880546001600160a01b031990811633179091556006805473b4a560deb7bf1ba86caab74b2f425e7bd11cf75d92168217905562000160906001620004e2565b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001da919062000a93565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000263919062000a93565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d7919062000a93565b600780546001600160a01b0319166001600160a01b0392909216919091179055620003346103e86200032d60026200032662000311601290565b6200031e90600a62000a7b565b87906200045f565b906200045f565b9062000541565b600a55620003506103e86200032d600262000326601262000311565b600b556200036c6103e86200032d600662000326601262000311565b600c556200037c33600162000566565b6200038930600162000566565b6200039861dead600162000566565b600980546001600160a01b0319166001600160a01b038316908117909155620003c390600162000566565b600754620003dc906001600160a01b03166001620005d4565b620003e9336001620004e2565b620003f6306001620004e2565b6200040561dead6001620004e2565b505062000b04565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008260000362000473575060006200049e565b600062000481838562000ab1565b90508262000490858362000acb565b146200049b57600080fd5b90505b92915050565b6001600160a01b038216620004d05760405163ec442f0560e01b815260006004820152602401620000e5565b620004de6000838362000645565b5050565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a25050565b60008082116200055057600080fd5b60006200055e838562000acb565b949350505050565b6200057062000778565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a15050565b6001600160a01b0382166000908152601060205260409020805460ff1916821515179055620006048282620004e2565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101620005c8565b6001600160a01b0383166200067457806002600082825462000668919062000aee565b90915550620006e89050565b6001600160a01b03831660009081526020819052604090205481811015620006c95760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000e5565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620007065760028054829003905562000725565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200076b91815260200190565b60405180910390a3505050565b6005546001600160a01b03163314620007a75760405163118cdaa760e01b8152336004820152602401620000e5565b565b80516001600160a01b0381168114620007c157600080fd5b919050565b60008060408385031215620007da57600080fd5b82519150620007ec60208401620007a9565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200082057607f821691505b6020821081036200084157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000897576000816000526020600020601f850160051c81016020861015620008725750805b601f850160051c820191505b8181101562000893578281556001016200087e565b5050505b505050565b81516001600160401b03811115620008b857620008b8620007f5565b620008d081620008c984546200080b565b8462000847565b602080601f831160018114620009085760008415620008ef5750858301515b600019600386901b1c1916600185901b17855562000893565b600085815260208120601f198616915b82811015620009395788860151825594840194600190910190840162000918565b5085821015620009585787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009bf578160001904821115620009a357620009a362000968565b80851615620009b157918102915b93841c939080029062000983565b509250929050565b600082620009d8575060016200049e565b81620009e7575060006200049e565b816001811462000a00576002811462000a0b5762000a2b565b60019150506200049e565b60ff84111562000a1f5762000a1f62000968565b50506001821b6200049e565b5060208310610133831016604e8410600b841016171562000a50575081810a6200049e565b62000a5c83836200097e565b806000190482111562000a735762000a7362000968565b029392505050565b600062000a8c60ff841683620009c7565b9392505050565b60006020828403121562000aa657600080fd5b62000a8c82620007a9565b80820281158282048414176200049e576200049e62000968565b60008262000ae957634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200049e576200049e62000968565b6131338062000b146000396000f3fe60806040526004361061030c5760003560e01c8063715018a61161019a578063a9059cbb116100e1578063dd62ed3e1161008a578063f2fde38b11610064578063f2fde38b146109c2578063fa0c21e3146109e2578063ffb54a9914610a1757600080fd5b8063dd62ed3e14610909578063e0bf7fd11461095c578063ed2dfc521461098c57600080fd5b8063b62496f5116100bb578063b62496f514610891578063b94a6dfe146108c1578063c0246668146108e957600080fd5b8063a9059cbb1461083b578063aa4bde281461085b578063b4a74a691461087157600080fd5b80638a8c523c1161014357806395d89b411161011d57806395d89b41146107e65780639a7a23d6146107fb5780639cd441da1461081b57600080fd5b80638a8c523c146107795780638da5cb5b1461078e5780638f84aa09146107b957600080fd5b806379c58dd01161017457806379c58dd01461070c57806379cc67901461074357806388e765ff1461076357600080fd5b8063715018a6146106c2578063751039fc146106d75780637571336a146106ec57600080fd5b8063313ce5671161025e57806350cd8e4c116102075780636090befe116101e15780636090befe1461064957806366d602ae1461066957806370a082311461067f57600080fd5b806350cd8e4c146105d65780635ab259fa146106095780635f3e849f1461062957600080fd5b806342966c681161023857806342966c681461056f57806349bd5a5e1461058f5780634a62bb65146105bc57600080fd5b8063313ce5671461051b57806336a0f8a51461052f5780633e0c06291461054f57600080fd5b8063153ee554116102c057806323b872dd1161029a57806323b872dd1461049557806329ae1a22146104b55780632afeadaa146104d557600080fd5b8063153ee554146104275780631694505e1461044957806318160ddd1461047657600080fd5b8063095ea7b3116102f1578063095ea7b3146103955780630f4ef8a6146103c557806310d5de53146103f757600080fd5b806306fdde0314610318578063074e89401461034357600080fd5b3661031357005b600080fd5b34801561032457600080fd5b5061032d610a49565b60405161033a9190612bb9565b60405180910390f35b34801561034f57600080fd5b506009546103709073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161033a565b3480156103a157600080fd5b506103b56103b0366004612c48565b610adb565b604051901515815260200161033a565b3480156103d157600080fd5b50600d5461037090610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561040357600080fd5b506103b5610412366004612c74565b600f6020526000908152604090205460ff1681565b34801561043357600080fd5b50610447610442366004612c74565b610af5565b005b34801561045557600080fd5b506006546103709073ffffffffffffffffffffffffffffffffffffffff1681565b34801561048257600080fd5b506002545b60405190815260200161033a565b3480156104a157600080fd5b506103b56104b0366004612c91565b610c33565b3480156104c157600080fd5b506104476104d0366004612ce8565b610c57565b3480156104e157600080fd5b5060095461050990760100000000000000000000000000000000000000000000900460ff1681565b60405160ff909116815260200161033a565b34801561052757600080fd5b506012610509565b34801561053b57600080fd5b5061044761054a366004612d1b565b610dd6565b34801561055b57600080fd5b506103b561056a366004612c48565b610f7d565b34801561057b57600080fd5b5061044761058a366004612d47565b611070565b34801561059b57600080fd5b506007546103709073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105c857600080fd5b50600d546103b59060ff1681565b3480156105e257600080fd5b50600954610509907501000000000000000000000000000000000000000000900460ff1681565b34801561061557600080fd5b50610447610624366004612d60565b61107d565b34801561063557600080fd5b50610447610644366004612c91565b611250565b34801561065557600080fd5b50610447610664366004612c74565b6114b6565b34801561067557600080fd5b50610487600b5481565b34801561068b57600080fd5b5061048761069a366004612c74565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3480156106ce57600080fd5b50610447611559565b3480156106e357600080fd5b5061044761156d565b3480156106f857600080fd5b50610447610707366004612db1565b6115c8565b34801561071857600080fd5b5060095461050990790100000000000000000000000000000000000000000000000000900460ff1681565b34801561074f57600080fd5b5061044761075e366004612c48565b611638565b34801561076f57600080fd5b50610487600a5481565b34801561078557600080fd5b5061044761164d565b34801561079a57600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff16610370565b3480156107c557600080fd5b506008546103709073ffffffffffffffffffffffffffffffffffffffff1681565b3480156107f257600080fd5b5061032d611714565b34801561080757600080fd5b50610447610816366004612db1565b611723565b34801561082757600080fd5b50610447610836366004612dea565b61178a565b34801561084757600080fd5b506103b5610856366004612c48565b6118ac565b34801561086757600080fd5b50610487600c5481565b34801561087d57600080fd5b5061044761088c366004612ce8565b6118c2565b34801561089d57600080fd5b506103b56108ac366004612c74565b60106020526000908152604090205460ff1681565b3480156108cd57600080fd5b5061037073b4a560deb7bf1ba86caab74b2f425e7bd11cf75d81565b3480156108f557600080fd5b50610447610904366004612db1565b6119e7565b34801561091557600080fd5b50610487610924366004612e0c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561096857600080fd5b506103b5610977366004612c74565b600e6020526000908152604090205460ff1681565b34801561099857600080fd5b50600954610509907801000000000000000000000000000000000000000000000000900460ff1681565b3480156109ce57600080fd5b506104476109dd366004612c74565b611a7e565b3480156109ee57600080fd5b506009546105099077010000000000000000000000000000000000000000000000900460ff1681565b348015610a2357600080fd5b506009546103b59074010000000000000000000000000000000000000000900460ff1681565b606060038054610a5890612e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8490612e3a565b8015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b5050505050905090565b600033610ae9818585611ae4565b60019150505b92915050565b610afd611af6565b73ffffffffffffffffffffffffffffffffffffffff8116610b4a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610b98576040517fac1c29fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff841602179055610be78160016119e7565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f6a4d7f1f5689d8662af0cc48303b3bc0173bd9a3cf32917d38ddfed5aa0604359060200160405180910390a150565b600033610c41858285611b49565b610c4c858585611c18565b506001949350505050565b610c5f611af6565b60ff81161580610c70575060ff8216155b15610ca7576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160ff168160ff161115610ce7576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095460ff7801000000000000000000000000000000000000000000000000909104811690831610610d45576040517f77427c0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff1679010000000000000000000000000000000000000000000000000060ff938416027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff161778010000000000000000000000000000000000000000000000009390921692909202179055565b610dde611af6565b610e0460125b610def90600a612fdc565b610dfe6103e8610dfe60025490565b9061211c565b831015610e3d576040517f1fbaba3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e476012610de4565b821015610e80576040517f1fbaba3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea9610e8f6012600a612fdc565b610dfe6103e8610dfe6003610ea360025490565b9061213e565b811015610ee2576040517f1fbaba3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ef8610ef16012600a612fdc565b849061213e565b600a55610f126012610f0b90600a612fdc565b839061213e565b600b55610f2b610f246012600a612fdc565b829061213e565b600c819055600a54600b546040805192835260208301919091528101919091527faa2ef8ba434f2f6bdaad3fcc2d5c35f02b08a47173c94877259407614bc46b559060600160405180910390a1505050565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314610fd1576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160000361100b576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8416908390600081818185875af1925050503d8060008114611061576040519150601f19603f3d011682016040523d82523d6000602084013e611066565b606091505b5090949350505050565b61107a338261217a565b50565b611085611af6565b60ff82161580611096575060ff8116155b806110a2575060ff8316155b156110d9576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff83166110e78284612feb565b60ff161115611122576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095460ff750100000000000000000000000000000000000000000090910481169084161061117d576040517f77427c0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009805460ff9485167501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff948616760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff949096167701000000000000000000000000000000000000000000000002939093167fffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff909116179390931791909116179055565b60085473ffffffffffffffffffffffffffffffffffffffff1633146112a1576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831615806112d8575073ffffffffffffffffffffffffffffffffffffffff8216155b1561130f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003611349576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa1580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190613004565b905080821115611416576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820183905285169063a9059cbb906044016020604051808303816000875af115801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af919061301d565b5050505050565b6114be611af6565b73ffffffffffffffffffffffffffffffffffffffff811661150b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915561107a9060016119e7565b611561611af6565b61156b60006121d6565b565b611575611af6565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6115d0611af6565b8061162a5760075473ffffffffffffffffffffffffffffffffffffffff9081169083160361162a576040517f9c4e22fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611634828261224d565b5050565b611643823383611b49565b611634828261217a565b611655611af6565b60095474010000000000000000000000000000000000000000900460ff16156116aa576040517f08fd3d0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610a5890612e3a565b61172b611af6565b60075473ffffffffffffffffffffffffffffffffffffffff90811690831603611780576040517fa5d832e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61163482826122d7565b611792611af6565b6006546117b790309073ffffffffffffffffffffffffffffffffffffffff1684611ae4565b60065473ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806117fa60055473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611887573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114af919061303a565b60006118b9338484611c18565b50600192915050565b6118ca611af6565b60095460ff78010000000000000000000000000000000000000000000000009091048116908316101580611920575060095460ff7501000000000000000000000000000000000000000000909104811690821610155b15611957576040517f77427c0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffff00ffff00ffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000060ff948516027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff161775010000000000000000000000000000000000000000009290931691909102919091179055565b6119ef611af6565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600e602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a15050565b611a86611af6565b73ffffffffffffffffffffffffffffffffffffffff8116611adb576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61107a816121d6565b611af1838383600161237d565b505050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461156b576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401611ad2565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c125781811015611c03576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401611ad2565b611c128484848403600061237d565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611c65576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611cb2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003611cec576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d5460ff16156120705760055473ffffffffffffffffffffffffffffffffffffffff848116911614801590611d3d575060055473ffffffffffffffffffffffffffffffffffffffff838116911614155b156120705760095474010000000000000000000000000000000000000000900460ff16611df75773ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604090205460ff16158015611dc0575073ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205460ff16155b15611df7576040517feb30de5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526010602052604090205460ff168015611e52575073ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604090205460ff16155b15611f0957600a54811115611e93576040517fbe601f7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54611ecc611ec58473ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b83906124c5565b1115611f04576040517faf1a8f1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612070565b73ffffffffffffffffffffffffffffffffffffffff821660009081526010602052604090205460ff168015611f64575073ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205460ff16155b15611fa557600b54811115611f04576040517f75bff70900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604090205460ff16158015612001575073ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205460ff16155b1561207057600c54612038611ec58473ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b1115612070576040517faf1a8f1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095460009074010000000000000000000000000000000000000000900460ff1680156120c3575073ffffffffffffffffffffffffffffffffffffffff84166000908152600e602052604090205460ff16155b80156120f5575073ffffffffffffffffffffffffffffffffffffffff83166000908152600e602052604090205460ff16155b15612108576121058484846124e1565b90505b611c1284846121178585612703565b61271e565b600080821161212a57600080fd5b60006121368385613068565b949350505050565b60008260000361215057506000610aef565b600061215c83856130a3565b9050826121698583613068565b1461217357600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166121ca576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401611ad2565b611634826000836127c5565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff82166000818152600f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260106020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821515179055612330828261224d565b6040805173ffffffffffffffffffffffffffffffffffffffff8416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101611a72565b73ffffffffffffffffffffffffffffffffffffffff84166123cd576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401611ad2565b73ffffffffffffffffffffffffffffffffffffffff831661241d576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401611ad2565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602090815260408083209387168352929052208290558015611c12578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516124b791815260200190565b60405180910390a350505050565b6000806124d283856130ba565b90508381101561217357600080fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526010602052604081205481908190819060ff1680612572575073ffffffffffffffffffffffffffffffffffffffff871660009081526010602052604090205460ff16158015612572575073ffffffffffffffffffffffffffffffffffffffff861660009081526010602052604090205460ff16155b1561257f578692506125b1565b73ffffffffffffffffffffffffffffffffffffffff871660009081526010602052604090205460ff16156125b1578592505b600d546040517f163f752200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526101009092049091169063163f752290602401602060405180830381865afa158015612627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264b919061301d565b156126ed57600d546040517fb8d04f4e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526101009092049091169063b8d04f4e90602401602060405180830381865afa1580156126c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ea91906130cd565b90505b6126f8878287612970565b979650505050505050565b60008282111561271257600080fd5b600061213683856130ea565b73ffffffffffffffffffffffffffffffffffffffff831661276e576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401611ad2565b73ffffffffffffffffffffffffffffffffffffffff82166127be576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401611ad2565b611af18383835b73ffffffffffffffffffffffffffffffffffffffff83166127fd5780600260008282546127f291906130ba565b909155506128af9050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015612883576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401611ad2565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166128d857600280548290039055612904565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161296391815260200190565b60405180910390a3505050565b60008080808073ffffffffffffffffffffffffffffffffffffffff871615612a0f575060095460ff760100000000000000000000000000000000000000000000820481169450770100000000000000000000000000000000000000000000008204811693508791612a08918591612a029175010000000000000000000000000000000000000000009091041687612703565b90612703565b9150612a5f565b60095460ff790100000000000000000000000000000000000000000000000000820481169550612a5c91780100000000000000000000000000000000000000000000000090041685612703565b91505b6000612a736064610dfe8960ff891661213e565b90506000612a896064610dfe8a60ff891661213e565b90506000612a9f6064610dfe8b60ff891661213e565b90508215612b5a57600d54612ad1908c90610100900473ffffffffffffffffffffffffffffffffffffffff168561271e565b600d546040517f59974e380000000000000000000000000000000000000000000000000000000081526004810185905261010090910473ffffffffffffffffffffffffffffffffffffffff16906359974e3890602401600060405180830381600087803b158015612b4157600080fd5b505af1158015612b55573d6000803e3d6000fd5b505050505b8115612b6b57612b6b8b858461271e565b8015612b9657600954612b96908c9073ffffffffffffffffffffffffffffffffffffffff168361271e565b612baa81612ba485856124c5565b906124c5565b9b9a5050505050505050505050565b60006020808352835180602085015260005b81811015612be757858101830151858201604001528201612bcb565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461107a57600080fd5b60008060408385031215612c5b57600080fd5b8235612c6681612c26565b946020939093013593505050565b600060208284031215612c8657600080fd5b813561217381612c26565b600080600060608486031215612ca657600080fd5b8335612cb181612c26565b92506020840135612cc181612c26565b929592945050506040919091013590565b803560ff81168114612ce357600080fd5b919050565b60008060408385031215612cfb57600080fd5b612d0483612cd2565b9150612d1260208401612cd2565b90509250929050565b600080600060608486031215612d3057600080fd5b505081359360208301359350604090920135919050565b600060208284031215612d5957600080fd5b5035919050565b600080600060608486031215612d7557600080fd5b612d7e84612cd2565b9250612d8c60208501612cd2565b9150612d9a60408501612cd2565b90509250925092565b801515811461107a57600080fd5b60008060408385031215612dc457600080fd5b8235612dcf81612c26565b91506020830135612ddf81612da3565b809150509250929050565b60008060408385031215612dfd57600080fd5b50508035926020909101359150565b60008060408385031215612e1f57600080fd5b8235612e2a81612c26565b91506020830135612ddf81612c26565b600181811c90821680612e4e57607f821691505b602082108103612e87577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115612f1557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612efb57612efb612e8d565b80851615612f0857918102915b93841c9390800290612ec1565b509250929050565b600082612f2c57506001610aef565b81612f3957506000610aef565b8160018114612f4f5760028114612f5957612f75565b6001915050610aef565b60ff841115612f6a57612f6a612e8d565b50506001821b610aef565b5060208310610133831016604e8410600b8410161715612f98575081810a610aef565b612fa28383612ebc565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612fd457612fd4612e8d565b029392505050565b600061217360ff841683612f1d565b60ff8181168382160190811115610aef57610aef612e8d565b60006020828403121561301657600080fd5b5051919050565b60006020828403121561302f57600080fd5b815161217381612da3565b60008060006060848603121561304f57600080fd5b8351925060208401519150604084015190509250925092565b60008261309e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610aef57610aef612e8d565b80820180821115610aef57610aef612e8d565b6000602082840312156130df57600080fd5b815161217381612c26565b81810381811115610aef57610aef612e8d56fea2646970667358221220ddd07cd98550109a5465595418671f4d5d26689a036f2922941877442235fe8064736f6c63430008180033000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000e385a822c2e6380cc356d6e7cb4ae615db7de095